Myślę o czymś takim:
String json = new JsonBuilder()
.add("key1", "value1")
.add("key2", "value2")
.add("key3", new JsonBuilder()
.add("innerKey1", "value3"))
.toJson();
Która biblioteka Java JSON jest najlepsza do tego rodzaju płynnego budowania?
Aktualizacja : owinąłem GSON i uzyskałem prawie pożądany rezultat ... z jednym problemem .
Odpowiedzi:
Korzystam z biblioteki org.json i stwierdziłem, że jest miła i przyjazna.
Przykład:
WYNIK:
źródło
Zobacz specyfikację Java EE 7 Json . To jest właściwy sposób:
źródło
javax.json
w Javie 7 i nowszych.javax.json
pakietu jest takaNiedawno stworzyłem bibliotekę do płynnego tworzenia obiektów Gson:
http://jglue.org/fluent-json/
Działa to tak:
Dzięki magii typów ogólnych generuje błędy kompilacji, jeśli spróbujesz dodać element do tablicy z kluczem właściwości lub element do obiektu bez nazwy właściwości:
Wreszcie interfejs API obsługuje mapowanie, które umożliwia mapowanie obiektów domeny do formatu JSON. Celem jest to, że po wydaniu Java8 będziesz mógł zrobić coś takiego:
źródło
Jeśli używasz Jacksona i dużo
JsonNode
budujesz w kodzie, możesz być interesujący w następującym zestawie narzędzi. Zaletą ich stosowania jest to, że obsługują bardziej naturalny styl tworzenia łańcuchów, który lepiej pokazuje strukturę tworzonego JSON.Oto przykład użycia:
Co jest równoważne z następującym kodem JSON:
Oto zajęcia:
Zauważ, że implementacja używa Lombok , ale możesz łatwo usunąć cukier, aby wypełnić standardowy szablon Java.
źródło
Jeśli uważasz, że powyższe rozwiązanie jest eleganckie, wypróbuj moją bibliotekę JsonBuilder . Został stworzony, aby umożliwić jeden sposób budowania struktur JSON dla wielu typów bibliotek Json. Aktualne wdrożenia obejmują Gson, Jackson i MongoDB. Np. Jackson właśnie się zamienił:
Chętnie dodam inne na życzenie, jest też dość łatwe do wykonania samodzielnie.
źródło
Wygląda na to, że prawdopodobnie chcesz zdobyć json-lib:
http://json-lib.sourceforge.net/
Douglas Crockford to facet, który wynalazł JSON; jego biblioteka Java jest tutaj:
http://www.json.org/java/
Wygląda na to, że ludzie z json-lib podjęli się tego, co przerwał Crockford. Oba w pełni obsługują JSON, oba używają (kompatybilnych, o ile wiem) konstrukcji JSONObject, JSONArray i JSONFunction.
„Mam nadzieję, że to pomoże ...
źródło
Implementacja referencyjna zawiera płynny interfejs. Sprawdź JSONWriter i jego podklasę JSONStringer implementującą toString
źródło
pisanie własnego jest dużo łatwiejsze niż myślisz, po prostu użyj interfejsu
JsonElementInterface
z metodąstring toJson()
i abstrakcyjnej klasyAbstractJsonElement
implementującej ten interfejs,wtedy wszystko, co musisz zrobić, to mieć klasę
JSONProperty
implementującą interfejs iJSONValue
(dowolny token),JSONArray
([...]) iJSONObject
({...}) rozszerzające klasę abstrakcyjnąJSONObject
ma listęJSONProperty
'sJSONArray
ma listęAbstractJsonElement
' sTwoja funkcja add w każdym z nich powinna pobierać listę vararg tego typu i zwracać
this
teraz, jeśli coś ci się nie podoba, możesz to po prostu poprawić
Zaletą interfejsu i klasy abstrakcyjnej jest to, że
JSONArray
nie może przyjmować właściwości, aleJSONProperty
może akceptować obiekty lub tabliceźródło