如何使用Jackson进行反序列化

时间:2012-11-29 20:48:06

标签: json spring-mvc jackson

来自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 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") // 

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

不确定这是不是一个好方法

1 个答案:

答案 0 :(得分:1)

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

  

public abstract JsonNode findValue(String fieldName)

     

在此查找具有指定名称的JSON对象字段的方法   节点或其子节点,并返回它具有的值。如果没有匹配   字段位于此节点或其后代中,返回null

所以我会检查第一个findValue()结果,如果它不为空,则执行第二个findValue()(如果发生这种情况,请使用日志通知你。)