Chciałbym przeanalizować dane z JSON, które są typu String
. Używam Google Gson .
Mam:
jsonLine = "
{
"data": {
"translations": [
{
"translatedText": "Hello world"
}
]
}
}
";
a moja klasa to:
public class JsonParsing{
public void parse(String jsonLine) {
// there I would like to get String "Hello world"
}
}
Odpowiedzi:
To prosty kod, uniknąłem wszelkich kontroli, ale to jest główna idea.
Aby uczynić użycie bardziej ogólnym - przekonasz się, że javadoc firmy Gson są całkiem jasne i pomocne.
źródło
W mojej pierwszej aplikacji gson unikałem używania dodatkowych klas do przechwytywania wartości, głównie dlatego, że używam json do spraw konfiguracyjnych
mimo braku informacji (choćby strony gson) to właśnie znalazłem i wykorzystałem:
zaczynając od
Za każdym razem, gdy gson widzi {}, tworzy Mapę (w rzeczywistości StringMap gson)
Za każdym razem, gdy gson widzi znak „”, tworzy ciąg
Za każdym razem, gdy gson widzi liczbę, tworzy Double
Za każdym razem, gdy gson widzi [], tworzy ArrayList
Możesz wykorzystać te fakty (łącznie) na swoją korzyść
Wreszcie to jest kod, który tworzy tę rzecz
źródło
Zwykle najprostszą rzeczą jest utworzenie pasującej hierarchii obiektów, na przykład:
a następnie powiąż przy użyciu GSON, przeglądaj hierarchię obiektów za pomocą pól. Dodawanie metod pobierających i ustawiających jest bezcelowe w przypadku podstawowych kontenerów danych.
Więc coś takiego:
źródło
Dla obiektów json można utworzyć odpowiednie klasy Java. Wartości całkowite i łańcuchowe mogą być odwzorowywane bez zmian. Json można analizować w ten sposób-
Oto przykład - http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html
źródło
Możesz użyć oddzielnej klasy do reprezentowania obiektu JSON i użyć
@SerializedName
adnotacji, aby określić nazwę pola do pobrania dla każdego członka danych:Następnie możesz wykonać parsowanie w metodzie parse () za pomocą
Gson
obiektu:Dzięki takiemu podejściu możesz ponownie użyć
Response
klasy, aby dodać inne dodatkowe pola w celu pobrania innych członków danych, których możesz chcieć wyodrębnić z JSON - na wypadek, gdybyś chciał wprowadzić zmiany, aby uzyskać wyniki dla, powiedzmy, wielu tłumaczeń w jednym wywołaniu, lub uzyskać dodatkowy ciąg znaków dla wykrytego języka źródłowego.źródło
Jednym ze sposobów byłoby utworzenie JsonObject i iterowanie przez parametry. Na przykład
Następnie możesz wyodrębnić wartości ziarna, takie jak:
Mam nadzieję że to pomoże.
źródło
Używając Gson do rozwiązania
, utworzyłbym klasę dla poszczególnych parametrów w łańcuchu json. Alternatywnie możesz utworzyć jedną główną klasę o nazwie „Dane”, a następnie w podobny sposób utworzyć klasy wewnętrzne. Dla jasności stworzyłem osobne klasy.
Zajęcia są następujące.
W klasie JsonParsing wywoływana jest metoda "parse",
gson.fromJson(jsonLine, Data.class)
która konwertuje String w obiektach Java przy użyciu Reflection.Po uzyskaniu dostępu do obiektu „Data” mamy dostęp do każdego parametru indywidualnie.
Nie miałem okazji przetestować tego kodu, ponieważ jestem z dala od mojej maszyny deweloperskiej. Ale to powinno pomóc.
Kilka dobrych przykładów i artykułów.
http://albertattard.blogspot.com/2009/06/practical-example-of-gson.html
http://sites.google.com/site/gson/gson-user-guide
Kod
źródło
private String translatedText
bez naruszania kontroli dostępu, więc nie ma sposobu,fromJSON
aby ustawić go w maszynach JVM, które nie zdecydowały się na odbicie odbiciem deptania całej kontroli dostępu.Prosty przykład analizy JSON w ten sposób
źródło
Najpierw wygeneruj metodę pobierającą i ustawiającą za pomocą poniższej witryny parsującej
http://www.jsonschema2pojo.org/
Teraz użyj Gson
Teraz użyj obiektu, aby uzyskać wartości, takie jak data, translationText
źródło
Możesz użyć zapytania JsonPath, aby wyodrębnić wartość. A dzięki JsonSurfer, który jest wspierany przez Gson, twój problem można rozwiązać za pomocą zaledwie dwóch linii kodu!
źródło
Kod jednowierszowy:
źródło