我需要编写一些添加器方法,将“ 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附加,
并用[]
括起来)
答案 0 :(得分:1)
正如@yokomizor所说,您需要使用两个元素obj1
和obj2
构建一个ArrayNode
:
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
个内存在内存中了。