Ich verstehe nicht, warum die letzte Zeile dieses Codes eine leere Zeichenfolge zurückgibt.javax.json seltsames Verhalten
Map<String, JsonObjectBuilder> HASH_MAP = new HashMap<>();
JsonObjectBuilder one = Json.createObjectBuilder();
one.add("test1","test1");
HASH_MAP.put("one", one);
JsonObjectBuilder two = Json.createObjectBuilder();
two.add("test2","test2");
HASH_MAP.put("two", two);
JsonObjectBuilder toReturn = Json.createObjectBuilder();
JsonArrayBuilder l1 = Json.createArrayBuilder();
for (Map.Entry<String, JsonObjectBuilder> l : HASH_MAP.entrySet()) {
l1.add(l.getValue());
}
toReturn.add("l1", l1);
toReturn.add("otherParam", "value2");
String strJSON = toReturn.build().toString();
System.out.println("JSON1: " + strJSON);
System.out.println("JSON2: " + HASH_MAP.get("one").build().toString());
Dies ist die Ausgabe:
Info: JSON1: {"l1":[{"test1":"test1"},{"test2":"test2"}],"otherParam":"value2"}
Info: JSON2: {}
Ich espetting, dass die zweite JSON {"test1":"test1"}
ist. Ich habe mich geirrt?
Das Problem scheint, Verbindung mit der .build()
Funktion zu sein, die alle valueMap Elemente, die zu HASH_MAP
hinzugefügt werden, auf Null setzt (sehen Sie das Bild).
Wie kann ich den Wert innerhalb der HASH_MAP
unberührt lassen?
versuchen, das zu testen: setzen Sie Ihre System.out .println ("JSON2:" + HASH_MAP.get ("eins"). build(). toString()); nach der Zeile HASH_MAP.put ("eins", eins); –
Dies ist die Ausgabe: JSON: {"test1": "test1"} # JSON: {"l1": [{}, {"test2": "test2"}], "otherParam": "value2"} # JSON : {} – user72708