我对Jackson和Spring-Boot很陌生。我正在尝试解析JsonNode对象,以从JsonNode对象中检索字符串的嵌套属性。
这是针对春季启动应用程序的,其中我将json文件发布到我的类对象的ArrayList中,然后将单个数组元素读取到JsonNode对象中。我试图将JsonNode对象转换为ArrayNode,然后使用
将父属性存储到其中ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
JsonNode rootNode = mapper.valueToTree(workflow);
ArrayNode arrayNode = (ArrayNode) rootNode.get("metadata");
,然后使用
在arrayNode中查找所需的属性Iterator<JsonNode> arrayNodeIterator = arrayNode.elements();
while(arrayNodeIterator.hasNext()){
JsonNode jsonNode = arrayNodeIterator.next();
String str = jsonNode.get("name").asText();
}
以下是我要阅读的json
{
"metadata": {
"name": "workflow-name"
},
"tasks": []
}
但是,我在GET请求中遇到以下错误。
java.lang.ClassCastException: class com.fasterxml.jackson.databind.node.ObjectNode cannot be cast to class com.fasterxml.jackson.databind.node.ArrayNode (com.fasterxml.jackson.databind.node.ObjectNode and com.fasterxml.jackson.databind.node.ArrayNode are in unnamed module of loader '
答案 0 :(得分:2)
从上面的JSON metadata
是JSONObject
到不是ArrayNode
1)将metadata
作为JsonNode
JsonNode rootNode = mapper.valueToTree(workflow);
JsonNode metaNode = rootNode.get("metadata");
2)现在获取name
System.out.println(metaNode.get("name").textValue());
3)tasks
是ArrayNode
,因此将tasks
设为Array
ArrayNode arrayNode = (ArrayNode) rootNode.get("tasks");
答案 1 :(得分:0)
尝试这个例子... 有关更多信息,请点击此处https://www.baeldung.com/jackson-json-to-jsonnode
String jsonString = "{"k1":"v1","k2":"v2"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree(jsonString);
// When
JsonNode jsonNode1 = actualObj.get("k1");
assertThat(jsonNode1.textValue(), equalTo("v1"));
答案 2 :(得分:0)
查看本文,了解如何以字符串形式从JSON节点对象读取元素。 http://www.java2novice.com/java-json/jackson/tree-model-read-json-node/