用Java中的Jackson打开嵌套JSON值的最干净方法是什么?

用Java中的Jackson打开嵌套JSON值的最干净方法是什么?,java,json,jackson,jsonnode,Java,Json,Jackson,Jsonnode,我有一个JSON,看起来像这样(为了举例,字段的数量大大减少): 请记住,我无法控制它,我无法更改它,这是我从API获得的 我为此创建了一个POJO类,如下所示: public class PojoClass { private String id; private String param1; private String param2; // getters and setters } 然后我用Jackson解析JSON(我必须使用它,请不要建议使用GSON或其他): 这

我有一个JSON,看起来像这样(为了举例,字段的数量大大减少):

请记住,我无法控制它,我无法更改它,这是我从API获得的

我为此创建了一个POJO类,如下所示:

public class PojoClass {
  private String id;
  private String param1;
  private String param2;

  // getters and setters
}
然后我用Jackson解析JSON(我必须使用它,请不要建议使用GSON或其他):

这不起作用,因为id、param1和param2中包含JSON,而不是直接值。代码可以很好地处理JSON,如下所示:

{
  "content": {
    "id": "1",
    "param1": "A",
    "param2": "55"
  }
}
但不幸的是,我需要的值存储在“内容”字段下

解决这个问题最干净的方法是什么


我知道我可以硬编码,并在构造函数中一个接一个地将所有值提取到变量中,但是有很多,而不是像本例中那样只有3个,显然这不是正确的方法。

您可以修改
JsonNode
元素,如
“id”:{“content:“1”}
{id:“1”}
在json字符串中,使用迭代器将它们作为元素访问,然后反序列化获得的新json
{“id”:“1”、“param1”:“A”、“param2”:“55”}
如下所示:

String content = "content";
ObjectMapper om = new ObjectMapper();
JsonNode root = om.readTree(json).get(content);

Iterator<String> it = root.fieldNames();
while (it.hasNext()) {
    String fieldName = it.next();
    ((ObjectNode)root).set(fieldName, root.get(fieldName).get(content));
} 

PojoClass table = om.readValue(root.toString(), PojoClass.class);
System.out.println(table); //it will print PojoClass{id=1, param1=A, param2=55}
String content=“content”;
ObjectMapper om=新的ObjectMapper();
JsonNode root=om.readTree(json.get(content);
迭代器it=root.fieldNames();
while(it.hasNext()){
String fieldName=it.next();
((ObjectNode)root).set(fieldName,root.get(fieldName).get(content));
} 
PojoClass table=om.readValue(root.toString(),PojoClass.class);
系统输出打印项次(表)//它将打印PojoClass{id=1,param1=A,param2=55}

这实际上是有道理的。我不明白,为什么我没有自己想出这个,哈哈。非常感谢much@Rinkashikachi不客气,谢谢你的提问,我了解了一些关于杰克逊的事,我不知道。
{
  "content": {
    "id": "1",
    "param1": "A",
    "param2": "55"
  }
}
String content = "content";
ObjectMapper om = new ObjectMapper();
JsonNode root = om.readTree(json).get(content);

Iterator<String> it = root.fieldNames();
while (it.hasNext()) {
    String fieldName = it.next();
    ((ObjectNode)root).set(fieldName, root.get(fieldName).get(content));
} 

PojoClass table = om.readValue(root.toString(), PojoClass.class);
System.out.println(table); //it will print PojoClass{id=1, param1=A, param2=55}