搜索JSON响应以查找和解析JSON对象

b4wnujal  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(100)

我尝试使用JacksonobjectMapper对一个JSON对象进行格式化。我遇到的问题是,这个目标对象可以被 Package 在各种其他JSON中,包括一些但不是所有匹配我的目标的字段。例如,我尝试对如下对象进行格式化:

public class Dog {  
    private String name;    
    private int age;
    private String color;  
}

字符串
从JSON对象,例如:

{
"type":"animal",
"name":"pet",
"object":{
  "name":"Rex",
  "age":4,
  "color":"brown"
  }
}


或者它可以来自一个对象,例如:

{
"pet-dog":{
  "name":"Rex",
  "age":4,
  "color":"brown"
  }
}


我还设置了@JsonIgnoreProperties(IgnoreUnknown=true),因为我的对象有时会有不重要的可选字段。
问题有两个方面,首先我需要解包任意JSON来找到我的目标对象,任意JSON在请求之间会有很大的变化;其次,要解包的任意JSON可能匹配我的目标对象的一个或多个字段名称(例如上面例子中的“name”)。
我想要的方法是在JSON中搜索一个包含一组必填字段的对象,然后尝试将其定义为我的对象。但不知道如何实现这一点。
我已经尝试使用ObjectMapper为所需属性添加注解:@JsonProperty(value = "user", required = true)

vnzz0bqm

vnzz0bqm1#

解决方案之一是先将整个JSON转换成JsonNode,然后使用JSON库搜索并转换JsonNode,再转换为POJO。
https://github.com/octomix/josson

JSON 1

Josson ex1 = Josson.fromJsonString(
    "{" +
    "\"type\":\"animal\"," +
    "\"name\":\"pet\"," +
    "\"object\":{" +
    "  \"name\":\"Rex\"," +
    "  \"age\":4," +
    "  \"color\":\"brown\"" +
    "  }" +
    "}");
JsonNode node = ex1.getNode("*[value[name!=null & age!=null & color!=null]]");
Dog dog = Josson.readValueFor(node, Dog.class);

字符串

JSON 2

Josson ex2 = Josson.fromJsonString(
    "{" +
    "\"pet-dog\":{" +
    "  \"name\":\"Rex\"," +
    "  \"age\":4," +
    "  \"color\":\"brown\"" +
    "  }" +
    "}");
JsonNode node = ex2.getNode("*[value[name!=null & age!=null & color!=null]]");
Dog dog = Josson.readValueFor(node, Dog.class);

相关问题