当前位置: 首页 > 知识库问答 >
问题:

如何使用Jackson进行反序列化

姚浩歌
2023-03-14

来自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(); Map userData=mapper.read值(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个答案

雍俊远
2023-03-14

在我看来,这没什么问题,只是不将这两个findValue()调用链接在一起会更安全,因为如果JSON字符串不包含第一个调用,您可能会得到一个NPE。从JsonNode javadoc:

公共抽象JsonNode findValue(字符串字段名)

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

因此,我会检查第一个findValue()结果,如果它不为null,则执行第二个findValue()(如果发生这种情况,会通过日志通知您)。

 类似资料:
  • 我想用Jackson 2.13.1反序列化一个枚举。 我找到了以下解决方案。 仍将收到以下错误:

  • 问题内容: 我使用杰克逊测试了Scala案例类的序列化。 DeserializeTest.java 福斯卡拉 当我运行上述Java类时,抛出了一个异常: 我如何(反)序列化Scala案例类? 问题答案: Jackson希望您的类是JavaBean,这意味着它希望该类的每个属性都具有getX()和/或setX()。 选项1 您可以使用注释BeanProperty在Scala中创建JavaBean类。

  • 问题内容: 我整天都在寻找可以解决这个问题的东西,但是到目前为止我还没有碰到很多运气。 我的问题很简单:如何使用Jackson正确反序列化匿名对象。 在出现异常之前,此输出为:JSON = [“ com.foo.test.JacksonTest $ 1”,{“ value”:5}]: 线程“主”中的异常com.fasterxml.jackson.databind.JsonMappingExcept

  • 问题内容: 我正在杰克逊1.6.2中使用REST Web服务/ ApacheWink。我如何注释枚举字段,以便Jackson对其进行反序列化? 内部阶层 Jackson的文档指出可以通过@JsonValue/来做到这一点,@JsonCreator但没有提供示例。 是否有人愿意像往常一样洒(java)bean? 问题答案: 如果您使用的是Jackson 1.9,则可以通过以下方式完成序列化: 因此,

  • 问题内容: 我有一些类A,B,C,它们都继承自BaseClass类。 我有一个String json,其中包含A,B,C或BaseClass的json表示形式。 我想要某种方法将此字符串反序列化为BaseClass(多态反序列化)。像这样 可以是A,B,C或BaseClass中任何一个的Json String表示形式。 问题答案: 目前尚不清楚原始海报有什么问题。我猜这是两件事之一: 未绑定JSO