Как определить размер массива json с помощью `com.faster xml .jackson.core.JsonParser` - PullRequest
1 голос
/ 03 мая 2020

Я использую внутреннюю библиотеку, которая предоставляет API для анализа значения json. Этот API предоставляет com.fasterxml.jackson.core.JsonParser для использования, который уже создан с соответствующим json потоком для чтения. Теперь, как мне определить размер массива, предполагая, что поток json, который этот экземпляр JsonParser анализирует, является объектом массива.

Я могу найти способ, создав экземпляр ObjectMapper с помощью этого экземпляра JsonParser, и создать контейнерный класс java со списком в нем (представляющий массив) и, наконец, определить размер. Мне было интересно, если это возможно сделать это только с JsonParser без использования ObjectMapper.

class ResultContainer {
 private List<Object> result;

 public List<Object> getResult() {
   return result;
 }

 public void setResult(List<Object> result) {
   this.result = result;
 }
}
----
void parseEntity(JsonParser parser) {
  ObjectMapper om = new ObjectMapper();
  ResultContainer rc = om.readValue(parser, ResultContainer.class);
  System.out.println(rc.getResult().size());
}

В вышеприведенном примере есть способ, которым я могу получить размер массива только с помощью JsonParser, без использования ObjectMapper и, следовательно, без создания фиктивного контейнера java класса.

1 Ответ

3 голосов
/ 03 мая 2020

Конечно, вы можете прочитать JSON в JsonNode: https://fasterxml.github.io/jackson-databind/javadoc/2.8/com/fasterxml/jackson/databind/ObjectMapper.html

JsonNode root = mapper.readTree(...);

и затем проанализировать это JsonNode. Взгляните на примеры: https://www.baeldung.com/jackson-json-node-tree-model#2 -handling-different-node-types

...