我该如何获取所有的键?包括子元素
原提问者GitHub用户cloud-jie
paths里面keys就是所有的key,包括子对象,你试下是不是你要的
Bean bean = ...; Map<String, Object> paths = JSONPath.paths(bean);
原回答者GitHub用户wenshao
你可以使用递归遍历的方式来获取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数据结构的复杂程度来选择不同的遍历方式。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。