使用Jackson在Java中解析JSON的子集

Bil*_*ong 8 java json jackson

给定一个Json,是否可以使用Jackson来解析消息的一部分?假设我感兴趣的数据埋藏在深层次的字段中,我根本不关心为每个类创建DTO类.

鉴于一个非常简化的场景,我想在不知道任何关于它之前的结构的情况下对Telephone类进行建模:

...{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}....
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用json-path和反序列化我感兴趣的部分.一些伪:

List<Telephone> phoneNrs = parse(".my.deep.structure.persons.phoneNumbers", List<Telephone.class>);
Run Code Online (Sandbox Code Playgroud)

Gui*_*Sim 7

ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree("... your JSON ...");
Run Code Online (Sandbox Code Playgroud)

JsonNode然后可以使用该对象进行调用get("my").get("deep").get("structure")以获取所需的节点。

到达该节点后,只需调用即可mapper.treeToValue(myDeepJsonNode, Telephone[].class)获得的数组Telephone。您也可以使用来获取列表TypeReference

要深入了解,您JsonNode还可以使用findValuefindPath方法。

Javadoc:https//fasterxml.github.io/jackson-databind/javadoc/2.2.0/com/fasterxml/jackson/databind/JsonNode.html