Jackson 多层级获取指定key值
问题
如何获取ace
bob
这两个key
?
源码
有一个json字符串,jackson转换后,如何获取data的key
String res = "{\"data\":[{\"ace\":[\"a001\",\"a002\",\"a003\"]},{\"bob\":[\"b001\"]}],\"code\":200}";ObjectMapper mapper = new ObjectMapper();
try {
JsonNode resObj = mapper.readTree(res);
String code = String.valueOf(resObj.get("code"));
if (code.equals("200")) {
for (JsonNode node: resObj.get("data")) {
System.out.println(node);
}
}
} catch (Exception e) {
log.error(e.getMessage());
}
回答:
直接 . 一下,然后就找到了 fieldNames
这个方法
if (code.equals("200")) { for (JsonNode node : resObj.get("data")) {
String firstName = node.fieldNames().next();
System.out.println(firstName);
}
}
回答:
jackson 支持 json pointer:
JsonNode aceNode = resObj.at("/data/0/ace");JsonNode bobNode = resObj.at("/data/1/bob");
System.out.println(aceNode);
System.out.println(bobNode);
回答:
可以使用org.json.JSONObject;
@Test
public void json(){
String res = "{\"data\":[{\"ace\":[\"a001\",\"a002\",\"a003\"]},{\"bob\":[\"b001\"]}],\"code\":200}";
JSONObject jsonObject = new JSONObject(res);
showJsonKeys(jsonObject,0);
}
void showJsonKeys(Object obj,int depth){
depth++;
if(obj instanceof JSONArray){
for (Object c_obj : ((JSONArray) obj)) {
showJsonKeys(c_obj, depth);
}
}else if(obj instanceof JSONObject){
for (String key : ((JSONObject) obj).keySet()) {
for (int i = 0; i < depth; i++) {
System.out.print(" ");
}
System.out.println(key);
showJsonKeys(((JSONObject) obj).get(key), depth);
}
}else{
//System.out.println("到底了");
}
}
以上是 Jackson 多层级获取指定key值 的全部内容, 来源链接: utcz.com/p/944275.html