使用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 键值数组动态映射到子对象?