Dopiero zaczynam używać json z java. Nie jestem pewien, jak uzyskać dostęp do wartości ciągu w JSONArray. Na przykład mój json wygląda tak:
{
"locations": {
"record": [
{
"id": 8817,
"loc": "NEW YORK CITY"
},
{
"id": 2873,
"loc": "UNITED STATES"
},
{
"id": 1501
"loc": "NEW YORK STATE"
}
]
}
}
mój kod:
JSONObject req = new JSONObject(join(loadStrings(data.json),""));
JSONObject locs = req.getJSONObject("locations");
JSONArray recs = locs.getJSONArray("record");
W tym momencie mam dostęp do „rekordu” JSONArray, ale nie jestem pewien, jak uzyskać wartości „id” i „loc” w pętli for. Przepraszam, jeśli ten opis nie jest zbyt jasny, jestem trochę nowy w programowaniu.
Odpowiedzi:
Czy próbowałeś użyć JSONArray.getJSONObject (int) i JSONArray.length () do utworzenia pętli for:
źródło
id
za pomocą sinple,getInt
jak otrzymujemy wartość hashmap przez określenie klucza, to dlaczego musimy wykonywać iterację za pomocą pętli for? Czy iteracja z pętlą nie powoduje wielokrotnegoid
przypisania getint id
?Plik org.json.JSONArray nie jest iterowalny .
Oto jak przetwarzam elementy w pliku net.sf.json.JSONArray :
Działa świetnie... :)
źródło
JSONArray
nie jest iterowalne.Java 8 jest na rynku od prawie dwóch dekad,
org.json.JSONArray
oto sposób na iterację z java8 Stream API.Jeśli iteracja jest tylko jeden raz (nie ma potrzeby
.collect
)źródło
.mapToObj
pokazuje „nieobsługiwany wyjątek: JSONException”.mapToObj(index -> (JSONObject) array.get(index))
,jsonArray.get(index)
które potencjalnie mogą się rzucać,JSONException
aleJSONException extends RuntimeException
powinnoPatrząc na Twój kod, wyczuwam, że używasz JSONLIB. W takim przypadku spójrz na poniższy fragment kodu, aby przekonwertować tablicę json na tablicę java.
źródło
Na wypadek, gdyby pomogło to komuś innemu, udało mi się przekonwertować na tablicę, robiąc coś takiego,
... albo powinieneś być w stanie uzyskać długość
źródło
org.json.JSONObject
matoJSONArray(JSONArray names)
metodę iorg.json.JSONArray
matoJSONObject(JSONArray names)
metodę, ale nie matoArray()
metody.HashMap regs = (HashMap) parser.parse (stringjson);
(String) (( HashMap ) regs.get ("firstlevelkey")). Get ("secondlevelkey");
źródło