De temps en temps, j'écrirai du code Java ... (Non, c'est le langage principal de mon entreprise), donc je posterai ce que j'ai recherché dans le cas dont je suis actuellement en charge.
Utilisez-vous le Spring Framework? Récemment, le côté serveur est souvent construit avec Node.js, Ruby, etc., et le côté PaaS a un mécanisme qui peut facilement fournir une API Web, il est donc assez rare de l'implémenter en Java. Je me demande, mais je suis toujours actif, donc je suis toujours en train de coder Java dans le projet actuel.
Cette fois, c'est une spécification un peu inhabituelle, et au lieu de mapper le JSON reçu par l'API Web construite dans Spring Framework vers POJO, nous avons décidé de le traiter tel quel (dynamiquement) et de le relier à une autre API Web. Ensuite, quand j'ai regardé Javadoc, je me suis demandé comment j'aurais dû créer JSON sans utiliser POJO dans Jackson, et j'ai trouvé que je devais faire ce qui suit.
ʻObjectMapper a fourni une méthode appelée
createObjectNode () `.
Vous pouvez l'utiliser pour créer un objet JSON vide.
Utilisez put (fieldName, value)
pour ajouter une valeur simple à cet objet.
Utilisez set (fieldName, value)
lors de l'ajout d'un objet ou d'un tableau.
Voici un exemple.
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.put("stringValue", "test");
root.set("brankObject", mapper.createObjectNode());
Lorsqu'il s'agit de tableaux, ʻObjectMapper a fourni une méthode appelée
createArrayNode () . Vous pouvez l'utiliser pour créer un tableau JSON vide. Utilisez ʻadd (value)
pour ajouter des éléments à ce tableau.
Voici un exemple.
ObjectMapper mapper = new ObjectMapper();
ArrayNode array = mapper.createArrayNode();
array.add("value");
array.add(mapper.createObjectNode());
C'est très inutile, mais si vous assemblez vous-même JSON à partir de POJO, ce sera comme ça.
public class Test {
public List<Item> items = Arrays.asList(
new Item("Item 1", "$19.99", Arrays.asList(new Feature("New!"), new Feature("Awesome!"))),
new Item("Item 2","$29.99", Arrays.asList(new Feature("Old."), new Feature("Ugly."))));
public static class Item {
Item(String name, String price, List<Feature> features) {
this.name = name;
this.price = price;
this.features = features;
}
public String name, price;
public List<Feature> features;
}
public static class Feature {
Feature(String description) {
this.description = description;
}
public String description;
}
public static void main(String[] args) throws IOException {
Test test = new Test();
ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
ObjectNode root = mapper.createObjectNode();
ArrayNode items = mapper.createArrayNode();
for (Item itemsObj : test.items) {
ObjectNode item = mapper.createObjectNode();
item.put("name", itemsObj.name);
item.put("price", itemsObj.price);
ArrayNode features = mapper.createArrayNode();
for (Feature featuresObj : itemsObj.features) {
ObjectNode feature = mapper.createObjectNode();
feature.put("description", featuresObj.description);
features.add(feature);
}
item.set("features", features);
items.add(item);
}
root.set("items", items);
System.out.println(mapper.writeValueAsString(root));
//Après tout, le résultat de sortie sera le même que ci-dessous
// System.out.println(mapper.writeValueAsString(test));
}
}
Résultat de sortie
{
"items" : [ {
"name" : "Item 1",
"price" : "$19.99",
"features" : [ {
"description" : "New!"
}, {
"description" : "Awesome!"
} ]
}, {
"name" : "Item 2",
"price" : "$29.99",
"features" : [ {
"description" : "Old."
}, {
"description" : "Ugly."
} ]
} ]
}
Les performances, etc. ne sont pas tellement prises en compte, mais veuillez vous y référer lors de la création de JSON directement avec Java + Jackson.
Recommended Posts