json对象
{
"destination_addresses" : [ "Chicago, IL, USA" ],
"origin_addresses" : [ "Syracuse, NY, USA" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "1,090 km",
"value" : 1090383
},
"duration" : {
"text" : "10 hours 21 mins",
"value" : 37242
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
中的代码
ObjectMapper mapper = new ObjectMapper(); 映射userData = mapper.readValue(webResource.queryParams(queryParams).get(String.class);,Map.class);
其中:
webResource.queryParams(queryParams).get(String.class);
从REST服务返回json
从Json我想要2个地址属性以及距离属性以及2状态。
我的黑客尝试:
ObjectMapper mapper = new ObjectMapper();
JsonNode jnode = mapper.readValue(s, JsonNode.class);
jnode.findValue("distance").findValue("value") //
这让我得到了我正在寻找的价值。
不确定这是不是一个好方法
答案 0 :(得分:1)
对我来说看起来没问题,但是不将这两个findValue()
调用链接在一起会更安全,因为如果JSON字符串不包含第一个调用,则可以获得NPE。来自JsonNode javadoc:
public abstract JsonNode findValue(String fieldName)
在此查找具有指定名称的JSON对象字段的方法 节点或其子节点,并返回它具有的值。如果没有匹配 字段位于此节点或其后代中,返回null 。
所以我会检查第一个findValue()
结果,如果它不为空,则执行第二个findValue()
(如果发生这种情况,请使用日志通知你。)