当前位置: 首页 > 面试题库 >

使用Jackson映射JSON树中特定节点的对象

颛孙英勋
2023-03-14
问题内容

是否可以ObjectMapper仅从JSON树中的特定节点(和“向下”)进行Jackson的解组?

用例是可扩展的文档格式。我想走一棵树,然后将当前路径发布到一组可扩展的插件,以查看用户是否正在使用和知道如何处理该文档部分的插件。

我希望插件作者不必处理JsonNodeAPI或流API
的底层细节;取而代之的是,只需传递一些上下文和一个特定的JsonNode,然后就可以使用可爱且方便的方法ObjectMapper来解组其类的实例,并将传递的节点视为树的根。


问题答案:

考虑以下JSON:

{
  "firstName": "John",
  "lastName": "Doe",
  "address": {
    "street": "21 2nd Street",
    "city": "New York",
    "postalCode": "10021-3100",
    "coordinates": {
      "latitude": 40.7250387,
      "longitude": -73.9932568
    }
  }
}

并考虑将coordinates节点解析为以下Java类:

public class Coordinates {

    private Double latitude;

    private Double longitude;

    // Default constructor, getters and setters omitted
}

要做到这一点,分析整个JSON成JsonNode具有ObjectMapper

String json = "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"address\":{\"street\":"
            + "\"21 2nd Street\",\"city\":\"New York\",\"postalCode\":\"10021-3100\","
            + "\"coordinates\":{\"latitude\":40.7250387,\"longitude\":-73.9932568}}}";

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);

然后使用JSON指针查询coordinates节点并将ObjectMapper其解析为Coordinates该类:

JsonNode coordinatesNode = node.at("/address/coordinates");
Coordinates coordinates = mapper.treeToValue(coordinatesNode, Coordinates.class);

JSON指针是遍历JSON的路径语言。有关更多详细信息,请检查RFC
6901
。从2.3版开始,它就可以在Jackson中使用。



 类似资料:
  • 有没有可能让Jackson的< code>ObjectMapper只从JSON树中的一个特定节点解组? 用例是可扩展的文档格式。我想遍历树,然后将当前路径发布到一组可扩展的插件,以查看用户是否正在使用以及知道如何处理文档该部分的插件。 我希望插件作者不必处理或流式API的低级细节;相反,只需传递一些上下文和特定的<code>JsonNodeObjectMapper

  • 假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外:

  • 我试图动态解析一些JSON到一个Map 但是当我尝试使用一些更复杂的JSON和嵌套信息时失败了。我试图从json解析示例数据。组织 我得到以下错误 异常在线程"main"com.fasterxml.jackson.databind.JsonMapping异常:不能反序列化实例的java.lang.字符串START_OBJECT令牌 有没有办法将复杂的JSON数据解析成映射?

  • 问题内容: 我一直在尝试创建Jersey REST Web服务。我想从Java类接收和发出JSON对象,如下所示: 应该这样将其转换为JSON: 但是,我找不到为此的标准解决方案。似乎每个人都在实现自己的包装器 解决方案。这个要求对我来说似乎是最基本的。我不敢相信这是普遍接受的解决方案,尤其是因为Jersey确实是Java中更有趣的部分之一。 我还尝试了升级到Jackson 1.8,这仅给了我这一

  • 我使用http://jsonlint.com来验证JSON是否有效。因此,我要么需要更改JSON或代码,要么可能两者都需要。有什么想法吗?

  • 问题内容: 我在以下架构中具有json对象: 在这里,该字段包含一个嵌入的json对象,并且该对象的模式是动态的,并且每次都不同。 的对象是不同的API服务,以及不同的API服务的不同方法获得的原始输出。不可能将其映射到所有可能的值。 是否可能有如下所示的java类: 或者类似的东西,以便我可以接收基本架构并对其进行处理,然后将其发送到相关类,该类将转换为适当的预期类? 问题答案: 使用 您可以从