Gelegentlich schreibe ich Java-Code ... (Nein, es ist die Hauptsprache in meinem Unternehmen), also werde ich veröffentlichen, was ich in dem Fall recherchiert habe, für den ich derzeit verantwortlich bin.
Verwenden Sie das Spring Framework? In letzter Zeit wird die Serverseite häufig mit Node.js, Ruby usw. erstellt, und die PaaS-Seite verfügt über einen Mechanismus, mit dem Web-APIs problemlos bereitgestellt werden können. Daher ist es recht selten, sie in Java zu implementieren. Ich frage mich, aber ich bin immer noch aktiv, also codiere ich immer noch Java im aktuellen Projekt.
Diesmal handelt es sich um eine etwas ungewöhnliche Spezifikation. Anstatt den von der im Spring Framework erstellten Web-API empfangenen JSON auf POJO abzubilden, haben wir beschlossen, ihn unverändert (dynamisch) zu verarbeiten und mit einer anderen Web-API zu verbinden. Als ich mir dann Javadoc ansah, fragte ich mich, wie ich JSON ohne POJO in Jackson hätte erstellen sollen, und stellte fest, dass ich Folgendes tun sollte.
Es gab eine Methode namens "createObjectNode ()" in "ObjectMapper". Sie können damit ein leeres JSON-Objekt erstellen.
Verwenden Sie put (fieldName, value), um diesem Objekt einen einfachen Wert hinzuzufügen.
Verwenden Sie beim Hinzufügen eines Objekts oder Arrays set (fieldName, value)
.
Unten ist ein Beispiel.
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.put("stringValue", "test");
root.set("brankObject", mapper.createObjectNode());
Beim Umgang mit Arrays stellte "ObjectMapper" eine Methode namens "createArrayNode ()" bereit.
Sie können damit ein leeres JSON-Array erstellen.
Verwenden Sie add (value)
, um diesem Array Elemente hinzuzufügen.
Unten ist ein Beispiel.
ObjectMapper mapper = new ObjectMapper();
ArrayNode array = mapper.createArrayNode();
array.add("value");
array.add(mapper.createObjectNode());
Es ist sehr nutzlos, aber wenn Sie JSON von POJO selbst zusammenbauen, wird es so sein.
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));
//Immerhin ist das Ausgabeergebnis das gleiche wie unten
// System.out.println(mapper.writeValueAsString(test));
}
}
Ausgabeergebnis
{
"items" : [ {
"name" : "Item 1",
"price" : "$19.99",
"features" : [ {
"description" : "New!"
}, {
"description" : "Awesome!"
} ]
}, {
"name" : "Item 2",
"price" : "$29.99",
"features" : [ {
"description" : "Old."
}, {
"description" : "Ugly."
} ]
} ]
}
Leistung usw. werden nicht so sehr berücksichtigt, aber bitte beziehen Sie sich darauf, wenn Sie JSON direkt mit Java + Jackson erstellen.
Recommended Posts