使用jackson从json数组中检索一个值

时间:2016-11-23 08:14:34

标签: java json jackson

我正在编写一个代码,我需要从json数组中获取特定的。我的json如下:

{
  "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
}

我想从天气数组中获取 id 。如果有很多,我想得到第一个项目的ID。

请让我知道我该怎么做。

我用来获取天气数组的代码是:

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());
}

此处, text 是json字符串。

2 个答案:

答案 0 :(得分:3)

以下行应该做的伎俩

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

您的代码修改可能如下:

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);

答案 1 :(得分:2)

在jackson中,JSON个对象转换为LinkedHashMap<String, Object>,因此您只需将Object item转换为Map<String, Object>,然后获取值对应于键id

这样的事情:

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;
    }
}

<强>输出:

Id=800