Объединить несколько JsonNode в массив с Джексоном - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно написать метод appender, который добавляет объекты "JsonNode" вместе.В конце это будет проходить рекурсивно в течение нескольких сотен итераций.В конце концов я бы преобразовал его в объект Avro.Поэтому, помимо «просто заставить его работать», я бы также хотел учитывать потребление памяти.

Упрощенный пример ниже:

  val s1 = """{"condition": "yes",
    "id": "file",
    "value": "File" }"""

  val s2 = """{"condition": "no",
    "id": "file2",
    "value": "File2" }"""

  val mapper = new ObjectMapper()

  val obj1: JsonNode = mapper.readTree(s1)
  val obj2: JsonNode = mapper.readTree(s2)

  // the following doesn't work obviously, but that's what I'm trying to do
  val result = obj1 + obj2
  println(result.toString)

желаемый результат будет:

[{"condition": "yes",
    "id": "file",
    "value": "File" },
 {"condition": "no",
    "id": "file2",
    "value": "File2" }]

Я возился с несколькими вариантами, но мне кажется, что я не могу легко приступить к работе.Если, конечно, я не пойду «струнным» путем, но он не такой чистый, как мне бы того хотелось.(добавьте s1 и s2 через , и заключите их в [] скобки)

1 Ответ

0 голосов
/ 22 октября 2018

Как уже заметил @yokomizor, вам нужно построить ArrayNode с двумя элементами obj1 и obj2:

val result: ArrayNode = mapper.createArrayNode()
result.add(obj1)
result.add(obj2)

или даже проще:

val result: ArrayNode = mapper.createArrayNode().add(obj1).add(obj2)

Дополнительный объем памяти этого места настолько мал, насколько это возможно, потому что внутренняя реализация ArrayNode просто имеет private List<JsonNode> _children, и у вас есть JsonNode все равно уже в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...