如何使用jackson从JsonNode对象以String形式检索JSON元素?

时间:2019-03-29 03:03:29

标签: java json spring spring-boot jackson

我对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 '

3 个答案:

答案 0 :(得分:2)

从上面的JSON metadataJSONObject到不是ArrayNode

1)将metadata作为JsonNode

JsonNode rootNode = mapper.valueToTree(workflow);

JsonNode  metaNode = rootNode.get("metadata");

2)现在获取name

System.out.println(metaNode.get("name").textValue());

3)tasksArrayNode,因此将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/