Jackson 多层级获取指定key值

问题

如何获取ace bob这两个key?
image.png

源码

有一个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());
}
阅读 5.6k
3 个回答

直接 . 一下,然后就找到了 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("到底了");
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏