2016-11-23 20 views
0

Ich schreibe einen Code, wo ich einen spezifischen Wert von einem JSON-Array erhalten muss. Mein json ist wie folgt:Abrufen eines Wertes aus JSON-Array mit Jackson

{ 
    "coord": { 
    "lon": 68.37, 
    "lat": 25.39 
    }, 
    "weather": [{ 
    "id": 800, 
    "main": "Clear", 
    "description": "clear sky", 
    "icon": "01d" 
    }], 
    "base": "stations", 
    "main": { 
    "temp": 302.645, 
    "pressure": 1023.33, 
    "humidity": 48, 
    "temp_min": 302.645, 
    "temp_max": 302.645, 
    "sea_level": 1025.53, 
    "grnd_level": 1023.33 
    }, 
    "wind": { 
    "speed": 1.81, 
    "deg": 54.0002 
    }, 
    "clouds": { 
    "all": 0 
    }, 
    "dt": 1479887201, 
    "sys": { 
    "message": 0.0023, 
    "country": "PK", 
    "sunrise": 1479865789, 
    "sunset": 1479904567 
    }, 
    "id": 1176734, 
    "name": "Hyderabad", 
    "cod": 200 
} 

ich die id von Wetter Array erhalten möchten. Wenn es viele gibt, möchte ich die ID des ersten Artikels erhalten.

Bitte lassen Sie mich wissen, wie kann ich das tun.

Der Code, den ich mit dem Wetter-Array zu erhalten ist:

text = builder.toString(); 
ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> map = mapper.readValue(text, new TypeReference<Map<String, Object>>() { 
}); 

List mainMap2 = (List) map.get("weather"); 
for (Object item : mainMap2) { 
    System.out.println("itemResult" + item.toString()); 
} 

Hier Text ist der JSON-String.

+0

Dies ist hier ungültig json – peter

+0

Look [http://stackoverflow.com/questions/23499721/how-to-parse-json-array-value-using-json-node](http://stackoverflow. com/fragen/23499721/How-to-Parse-JSON-Array-Wert-Using-Json-Knoten) – peter

Antwort

2

Linie folgend sollte den Trick

int id = (int)((Map)mainMap2.get(0)).get("id"); 

Modifikation des Codes tun kann wie folgt aussehen:

text = builder.toString(); 
ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> map = mapper.readValue(text, new TypeReference<Map<String, Object>>() { 
}); 

List mainMap2 = (List) map.get("weather"); 
//for (Object item : mainMap2) { 
// System.out.println("itemResult" + item.toString()); 
//} 
int id = (int)((Map)mainMap2.get(0)).get("id"); 
System.out.println(id); 
2

in Jackson werden JSON Objekte in LinkedHashMap<String, Object> umgewandelt, so müssen Sie einfach Ihre entsprechend dem Schlüssel idObjectitem in eine Map<String, Object>, dann erhalten Sie den Wert werfen.

Etwas wie folgt aus:

Integer id = null; 
for (Object item : mainMap2) { 
    Map<String, Object> mapItem = (Map<String, Object>) item; 
    id = (Integer) mapItem.get("id"); 
    if (id != null) { 
     // We have found an Id so we print it and exit from the for loop 
     System.out.printf("Id=%d%n", id); 
     break; 
    } 
} 

Ausgang:

Id=800 
Verwandte Themen