使用Jackson将多个JsonNodes合并到一个数组中

使用Jackson将多个JsonNodes合并到一个数组中,json,scala,jackson,Json,Scala,Jackson,我需要编写一些appender方法,将“JsonNode”对象添加到一起。 最后,这将在几百次迭代中递归运行。 最终我会将其转换为Avro对象。所以除了“让它工作”之外,我还想考虑内存消耗 下面是一个简化的例子: val s1 = """{"condition": "yes", "id": "file", "value": "File" }""" val s2 = """{"condition": "no", "id": "file2", "value"

我需要编写一些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,用
分隔,并用
[]
括号将其括起来)

正如@yokomizor已经评论过的,您需要用两个元素
obj1
obj2
构建一个:

val result: ArrayNode = mapper.createArrayNode()
result.add(obj1)
result.add(obj2)
或者更简单:

val result: ArrayNode = mapper.createArrayNode().add(obj1).add(obj2)
它的附加内存足迹尽可能小, 因为 只是有一个
私有列表\u孩子

而且您的
JsonNode
s已经在内存中了。

我不确定内存消耗情况,但您可以尝试ArrayNode.add,或者只是手动操作字符串。真不敢相信我没有看到这一点,我记得我尝试过类似的方法,但一直在尝试将JsonNode解析为ArrayNode(这不起作用)。感谢您多走了一英里,并计算出内存占用空间!