用Java中的Jackson打开嵌套JSON值的最干净方法是什么?
我有一个JSON,看起来像这样(为了举例,字段的数量大大减少): 请记住,我无法控制它,我无法更改它,这是我从API获得的 我为此创建了一个POJO类,如下所示:用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或其他): 这
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}