Znalazłem kilka odpowiedzi, które są bliskie temu, co próbuję zrobić, ale nie na tyle, że udało mi się je uruchomić. Mam pakiet JSON, który wygląda jak ten przykład (tylko kilka poziomów głębiej i setki elementów na poziomie, do którego chcę uzyskać dostęp): {"query":{"pages":{"links":[{"word":"bobsyeruncle","code":4},{"word":"easyaspie","code":3}]}}}
. Nie mogę zmienić formatu; to API kogoś innego. Jest bardzo dużo tego, czego nie potrzebuję; w rzeczywistości chcę tylko czegoś takiego jak tablica ["bobsyeruncle", "easyaspie"]. (Lub listę lub cokolwiek innego).Pobierz ciągi z tablicy JSON przy użyciu Jackson
Eksperymentowałem z prostszą wersją JSON, która nie miała tablicy, i był w stanie uzyskać dostęp do pojedynczego ciągu z łatwością za pomocą rootNode.get ("zapytanie"). ("strony") ... sposób opisany w https://stackoverflow.com/questions/338586/a-better-java-json-library/338608#338608. Ale nie udało mi się dotrzeć do tablicy w ten sposób. Większość odpowiedzi, które tutaj znalazłem, zakłada, że chcę utworzyć POJO, takie jak "Linki", które zawierają zarówno "słowo", jak i "kod", czego ja nie rozumiem. Aby uzyskać dostęp do żądanych ciągów, należy utworzyć coś w rodzaju listy "Łącza", która zawiera zarówno "słowo" i "kod", a następnie zignorować "kod"? To nie wydaje się właściwe.
(Także, jeśli ktoś może wskazać mi dokumentacji/samouczki gdzieś pomiędzy samouczka JacksonInFiveMinutes i całego javadoc, jestem pewien, że pomogłoby zbyt.)
ETA to działało, myślę !:
String theJsonString = "{\"query\":{\"pages\":{\"links\":"
+ "[{\"word\":\"bobsyeruncle\"},{\"word\":\"easyaspie\"}]}}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(theJsonString);
JsonNode interestingObjectNode = rootNode.path("query").path("pages").path("links");
for (int i = 0; i < interestingObjectNode.size(); i ++) {
System.out.println(interestingObjectNode.get(i).path("word").asText());
}
Usunięto mój poprzedni komentarz - W końcu tam dotarłem, umieść kod powyżej, na wypadek gdyby ktoś znalazł to pytanie. – umbraphile
Bezpieczny? co masz na myśli przez "Safe" w tym użyciu jackson? @StaxMan – gumuruh
Bezpieczne znaczenie, że jeśli użyjesz 'get', a nie ma węzła dopasowującego, zwróci on null i musi być zaznaczone. Ale z "path" zwracany jest wirtualny "brakujący węzeł", więc nie są potrzebne żadne kontrole zerowe. – StaxMan