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

问题描述 投票:3回答:2

我正在编写一个代码,我需要从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字符串。

java json jackson
2个回答
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);

2
投票

在杰克逊,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
© www.soinside.com 2019 - 2024. All rights reserved.