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

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

缪兴腾
2023-03-14

有没有可能让Jackson的< code>ObjectMapper只从JSON树中的一个特定节点解组?

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

我希望插件作者不必处理JsonNode或流式API的低级细节;相反,只需传递一些上下文和特定的<code>JsonNodeObjectMapper

共有1个答案

盖晋
2023-03-14

考虑以下JSON:

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

假设您希望将< code>coordinates节点解析为以下Java类:

public class Coordinates {

    private Double latitude;

    private Double longitude;
    
    // Default constructor, getters and setters omitted
}

为此,请使用 ObjectMapper 将整个 JSON 解析为 JsonNode

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指针查询< code>coordinates节点,并使用< code>ObjectMapper将其解析为< code>Coordinates类:

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

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

 类似资料:
  • 问题内容: 是否可以仅从JSON树中的特定节点(和“向下”)进行Jackson的解组? 用例是可扩展的文档格式。我想走一棵树,然后将当前路径发布到一组可扩展的插件,以查看用户是否正在使用和知道如何处理该文档部分的插件。 我希望插件作者不必处理API或流API 的底层细节;取而代之的是,只需传递一些上下文和一个特定的,然后就可以使用可爱且方便的方法来解组其类的实例,并将传递的节点视为树的根。 问题答

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

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

  • 我正在尝试创建一个函数,该函数通过二叉树搜索重复节点并将每个唯一节点在树中出现的次数存储到哈希图中。 这是一个更具体的问题- “创建一个名为YourBinaryTree的公共类,该类扩展BinaryTree。重写受保护的映射。” 我尝试递归地搜索树,但似乎无法使其工作,因为重复节点正在创建新映射,而不是替换旧映射的值。 以下是我迄今为止编写的代码: 以下是创建二叉树的类的代码: 我尝试过使用mer

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

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