Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)

Aperçu

--Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML) --Les jacks convertissent JSON en objets Java et SnakeYAML convertit les objets Java en YAML --SnakeYAML pour convertir YAML en objet Java et Jackson pour convertir un objet Java en JSON --Environnement: Java 15 (AdoptOpenJDK 15 + 36) + Jackson Databind 2.11.3 + ShakeYAML 1.27 + Gradle 6.6.1

Créer un environnement de construction / environnement d'exécution avec Gradle

Préparez le build.gradle suivant.

plugins {
  id 'java'
}

repositories {
  mavenCentral()
}

dependencies {
  //Utiliser Jackson Databind
  implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3'

  //Utilisez ShakeYAML
  implementation 'org.yaml:snakeyaml:1.27'
}

//Définir une tâche qui exécute la classe JsonToYaml
task jsonToYaml(type: JavaExec) {
  main = 'JsonToYaml'
  classpath = sourceSets.main.runtimeClasspath
}

//Définir une tâche qui exécute la classe YamlToJson
task yamlToJson(type: JavaExec) {
  main = 'YamlToJson'
  classpath = sourceSets.main.runtimeClasspath
}

Préparer une classe qui génère le contenu d'un objet Java

Préparez une classe qui génère des informations sur l'objet afin de comprendre la structure des données et la classe lors de la conversion de JSON ou YAML en objet Java.

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 *Sortez le contenu des objets Java dérivés de JSON ou YAML.
 */
public class ObjectDumper {

  private static final int INDENT = 2;

  public static String dump(Map<String, Object> obj) {
    List<String> buffer = new ArrayList<String>();
    dumpMap(obj, 0, buffer);
    return String.join("\n", buffer);
  }

  private static void dumpMap(Map<String, Object> obj, int depth, List<String> buffer) {
    for (Map.Entry<String, Object> entry : obj.entrySet()) {
      Object value = entry.getValue();
      if (value instanceof List) {
        buffer.add(line(entry.getKey(), value, depth));
        dumpList((List<Object>) value, depth + 1, buffer);
      } else if (value instanceof Map) {
        buffer.add(line(entry.getKey(), value, depth));
        dumpMap((Map<String, Object>) value, depth + 1, buffer);
      } else {
        buffer.add(line(entry.getKey(), value, depth));
      }
    }
  }

  private static void dumpList(List<Object> array, int depth, List<String> buffer) {
    for (Object element : array) {
      if (element instanceof List) {
        buffer.add(line(element, depth));
        dumpList((List<Object>) element, depth + 1, buffer);
      } else if (element instanceof Map) {
        buffer.add(line(element, depth));
        dumpMap((Map<String, Object>) element, depth + 1, buffer);
      } else {
        buffer.add(line(element, depth));
      }
    }
  }

  private static String line(String key, Object value, int depth) {
    if (value == null) {
      return " ".repeat(INDENT * depth) + key + ": " + "null";
    } else if (value instanceof Map) {
      return " ".repeat(INDENT * depth) + key + ": " + "(" + value.getClass().getName() + ")";
    } else if (value instanceof List) {
      return " ".repeat(INDENT * depth) + key + ": " + "(" + value.getClass().getName() + ")";
    } else {
      return " ".repeat(INDENT * depth) + key + ": " + value.toString() + " (" + value.getClass().getName() + ")";
    }
  }

  private static String line(Object value, int depth) {
    if (value == null) {
      return " ".repeat(INDENT * depth) + "null";
    } else if (value instanceof Map) {
      return " ".repeat(INDENT * depth) + "(" + value.getClass().getName() + ")";
    } else if (value instanceof List) {
      return " ".repeat(INDENT * depth) + "(" + value.getClass().getName() + ")";
    } else {
      return " ".repeat(INDENT * depth) + value.toString() + " (" + value.getClass().getName() + ")";
    }
  }
}

Convertir JSON en YAML

Convertir dans Jackson: JSON → objet Java Convertir avec SnakeYAML: objet Java → YAML

Code source

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;

import java.util.Map;

public class JsonToYaml {

  public static void main(String[] args) throws JsonProcessingException {

    //Chaîne JSON
    String json = """
      {
        "key": "value",
        "foo": "bar",
        "hoge": "fuga",
        "datalist": [
          {
            "string": "mojiretu",
            "integer": 123456,
            "decimal": 123.456,
            "boolean": true,
            "date": "2020-01-01",
            "timestamp": "2020-01-01T00:00:00.123456789+09:00",
            "nullonly": null,
            "object": {"hoge": "HOGE", "fuga": "FUGA"},
            "array": ["foo", "bar", "baz", ["spam", "ham", "eggs"]]
          },
          {
            "string": "Chaîne",
            "integer": 100000,
            "decimal": 999.999,
            "boolean": false,
            "date": "2020-01-01",
            "timestamp": "2020-01-01T00:00:00.123456789+09:00",
            "nullonly": null,
            "object": {"hoge": "Hoge", "fuga": "Fuga"},
            "array": ["Huh", "Bah", "Bazu", ["Spam", "jambon", "Oeuf"]]
          }
        ]
      }
      """;
    System.out.println("**********Chaîne JSON à saisir**********");
    System.out.println(json);

    System.out.println("**********Convertir JSON en objet Java**********");
    ObjectMapper mapper = new ObjectMapper();
    Map<String, Object> obj = mapper.readValue(json, new TypeReference<Map<String, Object>>() {
    });
    System.out.println(ObjectDumper.dump(obj));

    System.out.println("**********Convertir un objet Java en YAML**********");
    DumperOptions opts = new DumperOptions();
    opts.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
    String yaml = new Yaml(opts).dump(obj);
    System.out.println(yaml);
  }
}

Résultat d'exécution

**********Chaîne JSON à saisir**********
{
  "key": "value",
  "foo": "bar",
  "hoge": "fuga",
  "datalist": [
    {
      "string": "mojiretu",
      "integer": 123456,
      "decimal": 123.456,
      "boolean": true,
      "date": "2020-01-01",
      "timestamp": "2020-01-01T00:00:00.123456789+09:00",
      "nullonly": null,
      "object": {"hoge": "HOGE", "fuga": "FUGA"},
      "array": ["foo", "bar", "baz", ["spam", "ham", "eggs"]]
    },
    {
      "string": "Chaîne",
      "integer": 100000,
      "decimal": 999.999,
      "boolean": false,
      "date": "2020-01-01",
      "timestamp": "2020-01-01T00:00:00.123456789+09:00",
      "nullonly": null,
      "object": {"hoge": "Hoge", "fuga": "Fuga"},
      "array": ["Huh", "Bah", "Bazu", ["Spam", "jambon", "Oeuf"]]
    }
  ]
}

**********Convertir JSON en objet Java**********
key: value (java.lang.String)
foo: bar (java.lang.String)
hoge: fuga (java.lang.String)
datalist: (java.util.ArrayList)
  (java.util.LinkedHashMap)
    string: mojiretu (java.lang.String)
    integer: 123456 (java.lang.Integer)
    decimal: 123.456 (java.lang.Double)
    boolean: true (java.lang.Boolean)
    date: 2020-01-01 (java.lang.String)
    timestamp: 2020-01-01T00:00:00.123456789+09:00 (java.lang.String)
    nullonly: null
    object: (java.util.LinkedHashMap)
      hoge: HOGE (java.lang.String)
      fuga: FUGA (java.lang.String)
    array: (java.util.ArrayList)
      foo (java.lang.String)
      bar (java.lang.String)
      baz (java.lang.String)
      (java.util.ArrayList)
        spam (java.lang.String)
        ham (java.lang.String)
        eggs (java.lang.String)
  (java.util.LinkedHashMap)
    string:Chaîne(java.lang.String)
    integer: 100000 (java.lang.Integer)
    decimal: 999.999 (java.lang.Double)
    boolean: false (java.lang.Boolean)
    date: 2020-01-01 (java.lang.String)
    timestamp: 2020-01-01T00:00:00.123456789+09:00 (java.lang.String)
    nullonly: null
    object: (java.util.LinkedHashMap)
      hoge:Hoge(java.lang.String)
      fuga:Fuga(java.lang.String)
    array: (java.util.ArrayList)
Huh(java.lang.String)
Bah(java.lang.String)
Bazu(java.lang.String)
      (java.util.ArrayList)
Spam(java.lang.String)
jambon(java.lang.String)
Oeuf(java.lang.String)
**********Convertir un objet Java en YAML**********
key: value
foo: bar
hoge: fuga
datalist:
- string: mojiretu
  integer: 123456
  decimal: 123.456
  boolean: true
  date: '2020-01-01'
  timestamp: '2020-01-01T00:00:00.123456789+09:00'
  nullonly: null
  object:
    hoge: HOGE
    fuga: FUGA
  array:
  - foo
  - bar
  - baz
  - - spam
    - ham
    - eggs
- string:Chaîne
  integer: 100000
  decimal: 999.999
  boolean: false
  date: '2020-01-01'
  timestamp: '2020-01-01T00:00:00.123456789+09:00'
  nullonly: null
  object:
    hoge:Hoge
    fuga:Fuga
  array:
  -Huh
  -Bah
  -Bazu
  - -Spam
    -jambon
    -Oeuf

Convertir YAML en JSON

Convertir avec SnakeYAML: YAML → objet Java Convertir dans Jackson: objet Java → JSON

Code source

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.yaml.snakeyaml.Yaml;

import java.util.Map;

public class YamlToJson {

  public static void main(String[] args) throws JsonProcessingException {

    //Chaîne YAML
    String yaml = """
      key: value
      foo: bar
      hoge: fuga
      datalist:
      - string: mojiretu
        integer: 123456
        decimal: 123.456
        boolean: true
        date: 2020-01-01
        timestamp: 2020-01-01T00:00:00.123456789+09:00
        nullonly: null
        object:
          hoge: HOGE
          fuga: FUGA
        array:
        - foo
        - bar
        - baz
        - - spam
          - ham
          - eggs
      - string:Chaîne
        integer: 100000
        decimal: 999.999
        boolean: false
        date: 2020-01-01
        timestamp: 2020-01-01T00:00:00.123456789+09:00
        nullonly: null
        object:
          hoge:Hoge
          fuga:Fuga
        array:
        -Huh
        -Bah
        -Bazu
        - -Spam
          -jambon
          -Oeuf
      """;
    System.out.println("**********Chaîne YAML à saisir**********");
    System.out.println(yaml);

    System.out.println("**********Convertir YAML en objet Java**********");
    Map<String, Object> obj = new Yaml().load(yaml);
    System.out.println(ObjectDumper.dump(obj));

    System.out.println("**********Convertir un objet Java en JSON**********");
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
    System.out.println(json);
  }
}

Résultat d'exécution

**********Chaîne YAML à saisir**********
key: value
foo: bar
hoge: fuga
datalist:
- string: mojiretu
  integer: 123456
  decimal: 123.456
  boolean: true
  date: 2020-01-01
  timestamp: 2020-01-01T00:00:00.123456789+09:00
  nullonly: null
  object:
    hoge: HOGE
    fuga: FUGA
  array:
  - foo
  - bar
  - baz
  - - spam
    - ham
    - eggs
- string:Chaîne
  integer: 100000
  decimal: 999.999
  boolean: false
  date: 2020-01-01
  timestamp: 2020-01-01T00:00:00.123456789+09:00
  nullonly: null
  object:
    hoge:Hoge
    fuga:Fuga
  array:
  -Huh
  -Bah
  -Bazu
  - -Spam
    -jambon
    -Oeuf

**********Convertir YAML en objet Java**********
key: value (java.lang.String)
foo: bar (java.lang.String)
hoge: fuga (java.lang.String)
datalist: (java.util.ArrayList)
  (java.util.LinkedHashMap)
    string: mojiretu (java.lang.String)
    integer: 123456 (java.lang.Integer)
    decimal: 123.456 (java.lang.Double)
    boolean: true (java.lang.Boolean)
    date: Wed Jan 01 09:00:00 JST 2020 (java.util.Date)
    timestamp: Wed Jan 01 00:00:00 JST 2020 (java.util.Date)
    nullonly: null
    object: (java.util.LinkedHashMap)
      hoge: HOGE (java.lang.String)
      fuga: FUGA (java.lang.String)
    array: (java.util.ArrayList)
      foo (java.lang.String)
      bar (java.lang.String)
      baz (java.lang.String)
      (java.util.ArrayList)
        spam (java.lang.String)
        ham (java.lang.String)
        eggs (java.lang.String)
  (java.util.LinkedHashMap)
    string:Chaîne(java.lang.String)
    integer: 100000 (java.lang.Integer)
    decimal: 999.999 (java.lang.Double)
    boolean: false (java.lang.Boolean)
    date: Wed Jan 01 09:00:00 JST 2020 (java.util.Date)
    timestamp: Wed Jan 01 00:00:00 JST 2020 (java.util.Date)
    nullonly: null
    object: (java.util.LinkedHashMap)
      hoge:Hoge(java.lang.String)
      fuga:Fuga(java.lang.String)
    array: (java.util.ArrayList)
Huh(java.lang.String)
Bah(java.lang.String)
Bazu(java.lang.String)
      (java.util.ArrayList)
Spam(java.lang.String)
jambon(java.lang.String)
Oeuf(java.lang.String)
**********Convertir un objet Java en JSON**********
{
  "key" : "value",
  "foo" : "bar",
  "hoge" : "fuga",
  "datalist" : [ {
    "string" : "mojiretu",
    "integer" : 123456,
    "decimal" : 123.456,
    "boolean" : true,
    "date" : 1577836800000,
    "timestamp" : 1577804400123,
    "nullonly" : null,
    "object" : {
      "hoge" : "HOGE",
      "fuga" : "FUGA"
    },
    "array" : [ "foo", "bar", "baz", [ "spam", "ham", "eggs" ] ]
  }, {
    "string" : "Chaîne",
    "integer" : 100000,
    "decimal" : 999.999,
    "boolean" : false,
    "date" : 1577836800000,
    "timestamp" : 1577804400123,
    "nullonly" : null,
    "object" : {
      "hoge" : "Hoge",
      "fuga" : "Fuga"
    },
    "array" : [ "Huh", "Bah", "Bazu", [ "Spam", "jambon", "Oeuf" ] ]
  } ]
}

Matériel de référence

JSON + Jackson

YAML + SnakeYAML

Recommended Posts

Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Convertir l'énumération Java et JSON vers et depuis Jackson
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Essayez d'utiliser l'API au format JSON en Java
JSON en Java et Jackson Part ③ Incorporer JSON dans HTML et l'utiliser à partir de JavaScript
Exemple de code pour la sérialisation et la désérialisation des énumérations Java Enum et JSON dans Jackson
Analyser et objectiver JSON à l'aide de l'annotation @JsonProperty de la bibliothèque Java Jackson
JSON avec Java et Jackson Part 2 XSS mesures
Lire JSON en Java
POST JSON en Java
Créer JSON en Java
Conversion entre objets Java et JSON à l'aide de Moshi
Essayez d'utiliser RocksDB avec Java
[Java] Communication JSON avec jackson
POST Json en Java ~ HttpURLConnection ~
Sérialisation / désérialisation Json dans Java 1.4
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java
Exemple d'encodage et de décodage en Java
Chiffrer à l'aide du chiffrement RSA en Java
Comment POST JSON dans la méthode Java en utilisant OkHttp3 et la méthode en utilisant HttpUrlConnection-
Classe StringBuffer et StringBuilder en Java
Comprendre equals et hashCode en Java
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Bonjour tout le monde en Java et Gradle
[Java] Affiche le résultat de ffprobe -show_streams dans JSON et mappe-le à un objet dans Jackson
Création d'un projet (et d'un référentiel GitHub) à l'aide de Java et Gradle avec IntelliJ IDEA
J'ai essayé d'utiliser l'API Elasticsearch en Java
Convertir des objets Java org.w3c.dom.Document et des chaînes XML
Différence entre final et immuable en Java
Utilisation de Hystrix et Sentinel dans un exemple de code
Essayez d'utiliser l'API Stream en Java
Mapper sans utiliser de tableau en java
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Convertir des fichiers SVG en fichiers PNG en Java
Lire Felica en utilisant RC-S380 (PaSoRi) en Java
Coopération entre Java et Derby en utilisant JDBC (en utilisant NetBeans)
Différence entre les listes d'arry et les listes liées en Java
Gérez d'énormes JSON avec Java Lambda
Programmer les en-têtes et pieds de page PDF en Java
Apprenez les modèles Flyweight et ConcurrentHashMap en Java
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Lire et écrire des fichiers gzip en Java
Différence entre int et Integer en Java
Comment assembler JSON directement dans Jackson
Discrimination d'énum dans Java 7 et supérieur
Conversion de JSON en TSV et TSV en JSON avec Ruby
Remarques sur la mise en œuvre de l'API Google Books dans les versions java okhttp et gson et les versions okhttp et jackson
NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces en Java
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit
J'ai essayé de convertir Java Bean et XML avec le formateur XML de Jackson à cette époque
Soyez prudent avec les demandes et les réponses lors de l'utilisation de Serverless Framework avec Java