Jackson 多层级获取指定key值

问题

如何获取acebob这两个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

回到顶部