Как извлечь элемент JSON из объекта JsonNode как строку, используя Джексона? - PullRequest
1 голос
/ 29 марта 2019

Я довольно новичок в Джексоне и 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 ]

2 голосов
/ 29 марта 2019

Из вышеприведенного 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");
0 голосов
/ 29 марта 2019

Посмотрите в этой статье, как читать элементы из объекта узла JSON в виде строки. http://www.java2novice.com/java-json/jackson/tree-model-read-json-node/

0 голосов
/ 29 марта 2019

попробуйте этот пример ... для получения дополнительной информации проверьте здесь 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...