Nie rozumiem, dlaczego ostatni wiersz tego kodu zwraca pusty ciąg znaków.dziwne zachowanie javax.json
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());
To wyjście:
Info: JSON1: {"l1":[{"test1":"test1"},{"test2":"test2"}],"otherParam":"value2"}
Info: JSON2: {}
ja espetting że drugi JSON jest {"test1":"test1"}
. Jestem w błędzie?
Problem wydaje się być łączem z funkcją .build()
, która ustawia wszystkie wartości wartościMap elementów dodanych do HASH_MAP
na wartość null (patrz zdjęcie).
W jaki sposób mogę pozostawić wartość wewnątrz HASH_MAP
nietkniętą?
spróbuj przetestować że: umieścić swoje System.out .println ("JSON2:" + HASH_MAP.get ("one"). build(). toString()); po linii HASH_MAP.put ("jeden", jeden); –
To jest wynik: JSON: {"test1": "test1"} # JSON: {"l1": [{}, {"test2": "test2"}], "innyParam": "wartość2"} # JSON : {} – user72708