--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
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é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 dans Jackson: JSON → objet Java Convertir avec SnakeYAML: objet Java → YAML
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);
}
}
**********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 avec SnakeYAML: YAML → objet Java Convertir dans Jackson: objet Java → JSON
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);
}
}
**********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" ] ]
} ]
}
JSON + Jackson
YAML + SnakeYAML
Recommended Posts