0

来自 REST 服务的 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"
}

使用JacksonInFiveMinutes 中的代码

ObjectMapper 映射器 = 新 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") // 

这让我得到了我正在寻找的价值。

不确定这是否是好方法

4

1 回答 1

1

对我来说看起来不错,除了不将这两个findValue()调用链接在一起会更安全,因为如果 JSON 字符串不包含第一个调用,您可以获得 NPE。来自 JsonNode javadoc:

public abstract JsonNode findValue(String fieldName)

在此节点或其子节点中查找具有指定名称的 JSON Object 字段并返回其值的方法。如果在此节点或其后代中未找到匹配字段,则返回 null

所以我会检查第一个findValue()结果,如果它不为空,然后执行第二个findValue()(如果发生这种情况,记录会通知你)。

于 2012-11-30T00:46:58.163 回答