Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)

Überblick

Erstellen Sie mit Gradle eine Build- / Ausführungsumgebung

Bereiten Sie das folgende build.gradle vor.

plugins {
  id 'java'
}

repositories {
  mavenCentral()
}

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

  //Verwenden Sie ShakeYAML
  implementation 'org.yaml:snakeyaml:1.27'
}

//Definieren Sie eine Aufgabe, die die JsonToYaml-Klasse ausführt
task jsonToYaml(type: JavaExec) {
  main = 'JsonToYaml'
  classpath = sourceSets.main.runtimeClasspath
}

//Definieren Sie eine Aufgabe, die die YamlToJson-Klasse ausführt
task yamlToJson(type: JavaExec) {
  main = 'YamlToJson'
  classpath = sourceSets.main.runtimeClasspath
}

Bereiten Sie eine Klasse vor, die den Inhalt eines Java-Objekts ausgibt

Bereiten Sie eine Klasse vor, die Objektinformationen ausgibt, um die Datenstruktur und Klasse beim Konvertieren von JSON oder YAML in ein Java-Objekt zu verstehen.

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

/**
 *Geben Sie den Inhalt von Java-Objekten aus, die von JSON oder YAML abgeleitet sind.
 */
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() + ")";
    }
  }
}

Konvertieren Sie JSON in YAML

In Jackson konvertieren: JSON → Java-Objekt Konvertieren mit SnakeYAML: Java-Objekt → YAML

Quellcode

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 {

    //JSON-Zeichenfolge
    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": "String",
            "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", "Schinken", "Ei"]]
          }
        ]
      }
      """;
    System.out.println("**********Zu gebende JSON-Zeichenfolge**********");
    System.out.println(json);

    System.out.println("**********Konvertieren Sie JSON in ein Java-Objekt**********");
    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("**********Konvertieren Sie das Java-Objekt in YAML**********");
    DumperOptions opts = new DumperOptions();
    opts.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
    String yaml = new Yaml(opts).dump(obj);
    System.out.println(yaml);
  }
}

Ausführungsergebnis

**********Zu gebende JSON-Zeichenfolge**********
{
  "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": "String",
      "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", "Schinken", "Ei"]]
    }
  ]
}

**********Konvertieren Sie JSON in ein Java-Objekt**********
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:String(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)
Schinken(java.lang.String)
Ei(java.lang.String)
**********Konvertieren Sie das Java-Objekt in 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:String
  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
    -Schinken
    -Ei

Konvertieren Sie YAML in JSON

Konvertieren mit SnakeYAML: YAML → Java-Objekt In Jackson konvertieren: Java-Objekt → JSON

Quellcode

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 {

    //YAML-Zeichenfolge
    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:String
        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
          -Schinken
          -Ei
      """;
    System.out.println("**********YAML-Zeichenfolge eingeben**********");
    System.out.println(yaml);

    System.out.println("**********Konvertieren Sie YAML in ein Java-Objekt**********");
    Map<String, Object> obj = new Yaml().load(yaml);
    System.out.println(ObjectDumper.dump(obj));

    System.out.println("**********Konvertieren Sie das Java-Objekt in JSON**********");
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
    System.out.println(json);
  }
}

Ausführungsergebnis

**********YAML-Zeichenfolge eingeben**********
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:String
  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
    -Schinken
    -Ei

**********Konvertieren Sie YAML in ein Java-Objekt**********
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:String(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)
Schinken(java.lang.String)
Ei(java.lang.String)
**********Konvertieren Sie das Java-Objekt in 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" : "String",
    "integer" : 100000,
    "decimal" : 999.999,
    "boolean" : false,
    "date" : 1577836800000,
    "timestamp" : 1577804400123,
    "nullonly" : null,
    "object" : {
      "hoge" : "Hoge",
      "fuga" : "Fuga"
    },
    "array" : [ "Huh", "Bah", "Bazu", [ "Spam", "Schinken", "Ei" ] ]
  } ]
}

Referenzmaterial

JSON + Jackson

YAML + SnakeYAML

Recommended Posts

Konvertieren Sie JSON und YAML in Java (mit Jackson und SnakeYAML)
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Versuchen Sie es mit der JSON-Format-API in Java
JSON in Java und Jackson Teil ③ Betten Sie JSON in HTML ein und verwenden Sie es aus JavaScript
Beispielcode zum Serialisieren und Deserialisieren von Java Enum-Enumerationen und JSON in Jackson
Analysieren und objektivieren Sie JSON mithilfe der Annotation @JsonProperty von Jackson, einer Java-Bibliothek
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
Lesen Sie JSON in Java
POST JSON in Java
Erstellen Sie JSON in Java
Konvertieren Sie mit Moshi zwischen Java-Objekten und JSON
Versuchen Sie es mit RocksDB mit Java
[Java] JSON-Kommunikation mit Jackson
POST Json in Java ~ HttpURLConnection ~
Json-Serialisierung / Deserialisierung in Java 1.4
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Beispiel für Codierung und Decodierung in Java
Verschlüsselung mit RSA-Verschlüsselung in Java
Wie POST JSON in Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-
StringBuffer- und StringBuilder-Klasse in Java
Verstehe gleich und hashCode in Java
HTTPS-Verbindung mit tls1.2 in Java 6
Ich habe versucht, JWT in Java zu verwenden
Hallo Welt in Java und Gradle
[Java] Geben Sie das Ergebnis von ffprobe -show_streams in JSON aus und ordnen Sie es einem Objekt in Jackson zu
Erstellen eines Projekts (und eines GitHub-Repositorys) mit Java und Gradle mit IntelliJ IDEA
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Konvertieren Sie Java org.w3c.dom.Document-Objekte und XML-Zeichenfolgen
Unterschied zwischen final und Immutable in Java
Verwenden von Hystrix und Sentinel im Codebeispiel
Versuchen Sie es mit der Stream-API in Java
Map ohne Verwendung eines Arrays in Java
ERRORCODE = -4471 tritt in einer Java-Anwendung auf, die Db2 verwendet.
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
Lesen Sie Felica mit RC-S380 (PaSoRi) in Java
Zusammenarbeit zwischen Java und Derby mit JDBC (mit NetBeans)
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Behandeln Sie große JSON mit Java Lambda
Programmieren Sie PDF-Kopf- und Fußzeilen in Java
Lernen Sie Flyweight-Muster und ConcurrentHashMap in Java
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Lesen und Schreiben von GZIP-Dateien in Java
Unterschied zwischen int und Integer in Java
So montieren Sie JSON direkt in Jackson
Diskriminierung von Enum in Java 7 und höher
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
Hinweise zur Implementierung der Google Books-API in den Versionen Java Okhttp und Gson sowie Okhttp und Jackson
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung der Syntaxanalyse in Java
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung von Teilen in Java
Bei Verwendung einer Liste in Java wird java.awt.List ausgegeben und ein Fehler tritt auf
In dieser Zeit habe ich versucht, Java Bean und XML mit dem Jackson-Formatierer XML zu konvertieren
Seien Sie vorsichtig mit Anfragen und Antworten, wenn Sie das Serverless Framework mit Java verwenden