Mam następujący tekst JSON. W jaki sposób można analizować je, aby uzyskać wartości pageName
, pagePic
, post_id
, itd.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
Odpowiedzi:
Org.json biblioteka jest łatwy w użyciu. Przykładowy kod poniżej:
Możesz znaleźć więcej przykładów z: Parsuj JSON w Javie
Słoik do pobrania: http://mvnrepository.com/artifact/org.json/json
źródło
org.json
inne biblioteki do prostego parsowania JSON, nawet nie patrząc. Jest to biblioteka referencyjna, którą stworzył Douglas Crockford (odkrywca JSON).Dla przykładu załóżmy, że masz klasę
Person
z tylkoname
.Google GSON ( Maven )
Mój osobisty faworyt co do wielkiej serializacji / deserializacji obiektów JSON.
Aktualizacja
Jeśli chcesz uzyskać pojedynczy atrybut, możesz to łatwo zrobić również z biblioteką Google:
Org.JSON ( Maven )
Jeśli nie potrzebujesz deseryzacji obiektów, ale po prostu uzyskać atrybut, możesz wypróbować org.json ( lub spójrz na przykład GSON powyżej! )
Jackson ( Maven )
źródło
JsonNode
s, GSON ma coś podobnego). Może warto wyświetlać fragmenty, ponieważ jest to jedyny sposób, w jaki oferuje org.json.Jeśli chcesz utworzyć obiekt Java z JSON i odwrotnie, użyj słoików GSON lub JACKSON innych firm itp.
Ale jeśli chcesz po prostu przeanalizować ciąg JSON i uzyskać pewne wartości (LUB utworzyć ciąg JSON od zera, aby wysłać go przez drut), po prostu użyj jar JaveEE, który zawiera JsonReader, JsonArray, JsonObject itp. Możesz pobrać implementację tego spec jak javax.json. Dzięki tym dwóm słojom jestem w stanie przeanalizować json i użyć wartości.
Te interfejsy API są zgodne z modelem analizującym DOM / SAX XML.
źródło
Parser Quick-Json jest bardzo prosty, elastyczny, bardzo szybki i konfigurowalny. Spróbuj
Funkcje:
Można go użyć w następujący sposób:
źródło
Możesz użyć Google Gson .
Korzystając z tej biblioteki, wystarczy stworzyć model o tej samej strukturze JSON. Następnie model jest automatycznie wypełniany. Musisz wywoływać zmienne jako klucze JSON lub użyć,
@SerializedName
jeśli chcesz użyć innych nazw.JSON
Z twojego przykładu:
Model
Rozbiór gramatyczny zdania
Teraz możesz parsować za pomocą biblioteki Gson:
Importuj stopniowo
Pamiętaj, aby zaimportować bibliotekę z pliku Gradle aplikacji
Automatyczne generowanie modelu
Możesz wygenerować model z JSON automatycznie przy użyciu narzędzi online takich jak ten .
źródło
Prawie wszystkie udzielone odpowiedzi wymagają pełnej deserializacji JSON w obiekt Java przed uzyskaniem dostępu do wartości we właściwości będącej przedmiotem zainteresowania. Inną alternatywą, która nie idzie tą drogą, jest użycie JsonPATH, która jest jak XPath dla JSON i umożliwia przechodzenie obiektów JSON.
Jest to specyfikacja, a dobrzy ludzie z JayWay stworzyli implementację Java dla specyfikacji, którą można znaleźć tutaj: https://github.com/jayway/JsonPath
Więc w zasadzie, aby go użyć, dodaj go do swojego projektu, np .:
i użyć:
itp...
Sprawdź stronę specyfikacji JsonPath, aby uzyskać więcej informacji na temat innych sposobów przejścia na JSON.
źródło
A - Wyjaśnienie
Można użyć bibliotek Jacksona do powiązania ciągu JSON z instancjami POJO ( Plain Old Java Object ). POJO to po prostu klasa z tylko prywatnymi polami i publicznymi metodami getter / setter. Jackson będzie przeglądał metody (przy użyciu odbicia ) i mapuje obiekt JSON na instancję POJO, ponieważ nazwy pól klasy pasują do nazw pól obiektu JSON.
W obiekcie JSON, który jest w rzeczywistości obiektem złożonym , główny obiekt składa się z dwóch podobiektów. Zatem nasze klasy POJO powinny mieć tę samą hierarchię. Wywołam cały obiekt JSON jako obiekt strony . Obiekt strony składa się z obiektu PageInfo i tablicy obiektów Post .
Musimy więc stworzyć trzy różne klasy POJO;
Jedynym pakietem, z którego korzystałem, jest Jackson ObjectMapper, a my wiążemy dane;
Wymagane zależności, pliki jar są wymienione poniżej;
Oto wymagany kod;
B - Główna klasa POJO: strona
C - Klasa POJO podrzędna: PageInfo
D - Dziecko POJO Klasa: Poczta
E - Przykładowy plik JSON: sampleJSONFile.json
Właśnie skopiowałem twoją próbkę JSON do tego pliku i umieściłem ją w folderze projektu.
F - Kod demonstracyjny
G - Wyjście demonstracyjne
źródło
Użyj minimal-json, który jest bardzo szybki i łatwy w użyciu. Możesz analizować z String obj i Stream.
Przykładowe dane:
Rozbiór gramatyczny zdania:
Tworzenie JSON:
Maven:
źródło
Uważam, że najlepszą praktyką powinno być przejrzenie oficjalnego API JSON Java, które wciąż są w toku.
źródło
Ponieważ nikt jeszcze o tym nie wspominał, oto początek rozwiązania wykorzystującego Nashorn (środowisko wykonawcze JavaScript w Javie 8, ale przestarzałe w Javie 11).
Rozwiązanie
Porównanie wydajności
Napisałem treść JSON zawierającą trzy tablice zawierające odpowiednio 20, 20 i 100 elementów. Chcę tylko uzyskać 100 elementów z trzeciej tablicy. Korzystam z następującej funkcji JavaScript do analizowania i pobierania moich wpisów.
Wykonanie połączenia milion razy za pomocą Nashorn zajmuje 7,5 ~ 7,8 sekundy
org.json zajmuje 20 ~ 21 sekund
Jackson zajmuje 6,5 ~ 7 sekund
W tym przypadku Jackson radzi sobie lepiej niż Nashorn, który działa znacznie lepiej niż org.json. Nashorn API jest trudniejszy w użyciu niż org.json's lub Jackson's. W zależności od wymagań Jackson i Nashorn oba mogą być realnym rozwiązaniem.
źródło
"
”? Nie cale? Czy to sekundy? Minuty?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
Poniższy przykład pokazuje, jak czytać tekst w pytaniu, reprezentowany jako zmienna „jsonText”. To rozwiązanie wykorzystuje interfejs API Java EE7 javax.json (który jest wymieniony w niektórych innych odpowiedziach). Powodem dodania go jako oddzielnej odpowiedzi jest to, że poniższy kod pokazuje, jak faktycznie uzyskać dostęp do niektórych wartości pokazanych w pytaniu. W celu uruchomienia tego kodu wymagana będzie implementacja interfejsu API javax.json . Dołączono pełny pakiet dla każdej wymaganej klasy, ponieważ nie chciałem deklarować instrukcji „import”.
Teraz, zanim ktokolwiek przejdzie i zlekceważy tę odpowiedź, ponieważ nie używa GSON, org.json, Jackson ani żadnego z innych dostępnych frameworków innych firm, jest to przykład „wymaganego kodu” na pytanie, aby przeanalizować podany tekst. Jestem w pełni świadomy, że przestrzeganie obecnego standardu JSR 353 nie było brane pod uwagę dla JDK 9 i jako takie specyfikację JSR 353 należy traktować tak samo, jak każdą inną implementację obsługi JSON innej firmy.
źródło
To zadziwiło mnie, jak łatwo było. Możesz po prostu przekazać
String
trzymający JSON konstruktorowi JSONObject w domyślnym pakiecie org.json.Gotowy. Zrzuca mikrofon . Działa to
JSONObjects
również z. Następnie możesz po prostu przejrzeć swoją hierarchięObjects
korzystania zget()
metod na obiektach.źródło
JSONArray
typ nie jest częścią interfejsu API JDSE J2SE i nie wiadomo, który interfejs API lub biblioteka innej firmy udostępnia ten typ.Istnieje wiele bibliotek JSON dostępnych w Javie.
Najbardziej znane to: Jackson, GSON, Genson, FastJson i org.json.
Zazwyczaj przy wyborze dowolnej biblioteki należy zwrócić uwagę na trzy rzeczy:
W szczególności w bibliotekach JSON (i wszelkich bibliotekach serializacji / deserializacji) wiązanie danych jest również zwykle interesujące, ponieważ eliminuje potrzebę pisania kodu płyty kotłowej do pakowania / rozpakowywania danych.
Dla 1 zobacz ten test porównawczy: https://github.com/fabienrenaud/java-json-benchmark Zrobiłem przy użyciu JMH, który porównuje (jackson, gson, genson, fastjson, org.json, jsonp) wydajność serializatorów i deserializatorów za pomocą streamu i interfejsy API dla danych. Dla 2 osób można znaleźć liczne przykłady w Internecie. Powyższy punkt odniesienia można również wykorzystać jako źródło przykładów ...
Szybki start benchmarku: Jackson radzi sobie od 5 do 6 razy lepiej niż org.json i ponad dwukrotnie lepiej niż GSON.
W twoim przykładzie następujący kod dekoduje twój plik Json za pomocą Jacksona:
Daj mi znać, jeśli masz jakieś pytania.
źródło
Oprócz innych odpowiedzi polecam ten internetowy serwis jsonschema2pojo.org do szybkiego generowania klas Java ze schematu json lub json dla GSON, Jackson 1.x lub Jackson 2.x. Na przykład, jeśli masz:
Jsonschema2pojo.org dla GSON generowane:
źródło
Jeśli masz klasę Java (na przykład Wiadomość) reprezentującą ciąg JSON (jsonString), możesz użyć biblioteki Jackson JSON z:
a z obiektu wiadomości możesz pobrać dowolny jego atrybut.
źródło
Gson jest łatwy do opanowania i wdrożenia, musimy wiedzieć, że stosujemy dwie metody
toJson () - Konwertuj obiekt Java na format JSON
fromJson () - Konwertuj JSON na obiekt Java
`
`
źródło
Istnieje wiele bibliotek typu open source do analizowania zawartości JSON na obiekcie lub po prostu do odczytu wartości JSON. Wymagane jest jedynie odczytanie wartości i parsowanie ich do obiektu niestandardowego. Więc biblioteka org.json jest wystarczająca w twoim przypadku.
Użyj biblioteki org.json, aby ją przeanalizować i utworzyć JsonObject:
Teraz użyj tego obiektu, aby uzyskać swoje wartości:
Pełny przykład możesz zobaczyć tutaj:
Jak parsować JSON w Javie
źródło
Zrób coś takiego:
źródło
Możesz użyć biblioteki Gson, aby przeanalizować ciąg JSON.
Możesz także zapętlić tablicę „postów” w następujący sposób:
źródło
źródło
Przeczytaj następujący post na blogu, JSON w Javie .
Ten post jest trochę stary, ale wciąż chcę odpowiedzieć na twoje pytanie.
Krok 1: Utwórz klasę POJO swoich danych.
Krok 2: Teraz utwórz obiekt za pomocą JSON.
Więcej informacji można znaleźć pod następującym linkiem .
źródło
Najlepsze odpowiedzi na tej stronie wykorzystują zbyt proste przykłady, takie jak obiekt z jedną właściwością (np. {Nazwa: wartość}). Myślę, że ten prosty, ale prawdziwy przykład może komuś pomóc.
Oto JSON zwrócony przez Google Translate API:
Chcę odzyskać wartość atrybutu „przetłumaczony tekst”, np. „Arbeit” za pomocą Google'a Gson.
Dwa możliwe podejścia:
Pobierz tylko jeden potrzebny atrybut
Utwórz obiekt Java z JSON
...
źródło
Najpierw musisz wybrać bibliotekę implementacji, aby to zrobić.
API Java dla JSON przetwarzania (JSR 353) zapewnia przenośne API do analizowania, tworzenia, przekształcania i JSON zapytania przy użyciu modelu obiektowego i strumieniowego API.
Realizacja odniesienia jest tutaj: https://jsonp.java.net/
Tutaj znajdziesz listę wdrożeń JSR 353:
Jakie API implementuje JSR-353 (JSON)
I aby pomóc ci zdecydować ... Znalazłem również ten artykuł:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Jeśli zdecydujesz się na Jackson, oto dobry artykuł na temat konwersji między JSON na / z Java za pomocą Jacksona: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /
Mam nadzieję, że to pomoże!
źródło
Możesz użyć Jayway JsonPath . Poniżej znajduje się link GitHub z kodem źródłowym, szczegółami pom i dobrą dokumentacją.
https://github.com/jayway/JsonPath
Wykonaj poniższe kroki.
Krok 1 : Dodaj zależność Jyway JSON do ścieżki klasy w Maven lub pobierz plik JAR i dodaj go ręcznie.
Krok 2 : Zapisz wejściowy JSON jako plik dla tego przykładu. W moim przypadku zapisałem twój JSON jako sampleJson.txt. Pamiętaj, że przegapiłeś przecinek między pageInfo a postami.
Krok 3 : Odczytaj zawartość JSON z powyższego pliku za pomocą bufferedReader i zapisz jako String.
Krok 4 : Przetwarzaj swój ciąg JSON za pomocą analizatora JSON jayway.
Krok 5 : Przeczytaj szczegóły jak poniżej.
Dane wyjściowe będą :
źródło
Mam JSON taki:
Klasa Java
Kod do konwersji tego JSON na klasę Java.
Maven
źródło
Adnotacji Apache @Model można używać do tworzenia klas modeli Java reprezentujących strukturę plików JSON i używania ich do uzyskiwania dostępu do różnych elementów drzewa JSON . W przeciwieństwie do innych rozwiązań, to działa całkowicie bez odbicia i dlatego nadaje się do środowisk, w których odbicie jest niemożliwe lub wiąże się ze znacznym obciążeniem.
Istnieje przykładowy projekt Maven pokazujący użycie. Przede wszystkim określa strukturę:
a następnie wykorzystuje wygenerowane klasy RepositoryInfo i Owner w celu parsowania podanego strumienia wejściowego i pobrania określonych informacji, wykonując to:
To jest to! Oprócz tego tutaj jest żywa istota pokazująca podobny przykład wraz z asynchroniczną komunikacją sieciową.
źródło
jsoniter
(jsoniterator) to stosunkowo nowa i prosta biblioteka json, zaprojektowana tak, aby była prosta i szybka. Wszystko, co musisz zrobić, aby dokonać deserializacji danych JSON, togdzie
jsonData
jest ciąg danych JSON.Sprawdź oficjalną stronę internetową, aby uzyskać więcej informacji.
źródło
Możemy użyć klasy JSONObject do konwersji ciągu JSON na obiekt JSON i iteracji po obiekcie JSON. Użyj następującego kodu.
źródło
Możesz użyć biblioteki parsowania strumienia DSM do parsowania złożonego dokumentu json i XML. DSM parsuje dane tylko raz i nie ładuje wszystkich danych do pamięci.
Powiedzmy, że mamy klasę Page, która dokonuje deserializacji danych Json.
Klasa strony
Utwórz plik yaml Mapping.
Użyj DSM do wyodrębnienia pól.
zmienna strony zserializowana do json:
DSM jest bardzo dobry dla złożonych plików Json i XML.
źródło
Możesz użyć
JsonNode
do ustrukturyzowanej reprezentacji drzewa swojego łańcucha JSON. Jest to część wszechstronnej biblioteki Jacksona, która jest wszechobecna.źródło