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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jackson从json数组中检索一个值相关的知识,希望对你有一定的参考价值。

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

答案

以下行应该做的伎俩

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);
另一答案

在杰克逊,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

以上是关于使用jackson从json数组中检索一个值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jackson 将 JSON 键值数组动态映射到子对象?

从 JSON 字符串中的二维数组中检索值

尝试从 Android Studio 中的 json 对象中检索 json 值

以键和值数组的形式快速从 JSON 中检索特定数组?

使用 swift 将数组保存和检索到用户默认值

jq json根据条件从内部数组中检索值并将其添加到数组之外