我需要编写一些附加程序方法,将“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 已经评论的那样,您需要构建一个 ArrayNode
有两个元素 obj1
和obj2
:
val result: ArrayNode = mapper.createArrayNode()
result.add(obj1)
result.add(obj2)
或者更简单:
val result: ArrayNode = mapper.createArrayNode().add(obj1).add(obj2)
额外的内存占用尽可能小,
因为internal implementation of ArrayNode
只是有一个 private List<JsonNode> _children
,
你有 JsonNode
无论如何,它已经在内存中了。
关于json - 使用 Jackson 将多个 JsonNode 合并到一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930011/