开发者社区> 问答> 正文

我该如何获取fastjson2所有的键?包括子元素

我该如何获取所有的键?包括子元素

原提问者GitHub用户cloud-jie

展开
收起
白夜行fighting 2023-04-21 10:53:23 229 0
2 条回答
写回答
取消 提交回答
  • paths里面keys就是所有的key,包括子对象,你试下是不是你要的

    Bean bean = ...; Map<String, Object> paths = JSONPath.paths(bean);

    原回答者GitHub用户wenshao

    2023-04-21 13:55:26
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    你可以使用递归遍历的方式来获取ObjectNode中所有的键,包括子元素。以下是一个示例代码,演示如何遍历ObjectNode中的所有键:

    import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode;

    import java.util.Iterator;

    public class ObjectNodeExample { public static void main(String[] args) { String jsonStr = "{"name":"John","age":30,"address":{"city":"New York","state":"NY"},"phones":["123456","987654"]}";

        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(jsonStr);
            if (rootNode instanceof ObjectNode) {
                ObjectNode objectNode = (ObjectNode) rootNode;
                printKeys(objectNode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void printKeys(ObjectNode objectNode) {
        Iterator<String> fieldNames = objectNode.fieldNames();
        while (fieldNames.hasNext()) {
            String fieldName = fieldNames.next();
            System.out.println(fieldName);
            JsonNode fieldValue = objectNode.get(fieldName);
            if (fieldValue instanceof ObjectNode) {
                printKeys((ObjectNode) fieldValue);
            } else if (fieldValue instanceof ArrayNode) {
                ArrayNode arrayNode = (ArrayNode) fieldValue;
                for (int i = 0; i < arrayNode.size(); i++) {
                    JsonNode element = arrayNode.get(i);
                    if (element instanceof ObjectNode) {
                        printKeys((ObjectNode) element);
                    }
                }
            }
        }
    }
    

    } 在上述代码中,我们首先定义了一个ObjectMapper对象,并使用它来将JSON字符串解析成JsonNode对象。然后,我们判断JsonNode对象是否为ObjectNode类型,如果是,则通过递归遍历的方式打印出所有的键。在遍历过程中,我们使用fieldNames()方法获取所有的键,然后通过get()方法获取键对应的值,再根据值的类型进行递归遍历或者遍历数组元素。在遍历数组元素时,我们也需要判断元素类型是否为ObjectNode类型,如果是,则递归遍历其子元素。

    需要注意的是,上述代码仅提供了一种遍历ObjectNode中所有键的方式,你可以根据具体的业务需求以及JSON数据结构的复杂程度来选择不同的遍历方式。

    2023-04-21 12:03:26
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载