json - 使用 Jackson 将多个 JsonNode 合并到一个数组中

标签 json scala jackson

我需要编写一些附加程序方法,将“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 有两个元素 obj1obj2 :

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/

相关文章:

json - 在 Swift 中将数组元素转换为合适的 json

python - Flask RESTful POST JSON 失败

json - 如何使用 bash 或 jq 在 linux 中解析 Json 文件以设置结果

java - 如何将 jsonNodes 列表转换为单个 jsonNode

java - 如何使用 Jackson 基于注释从对象中(反)序列化字段?

javascript - 如何使用 jsonp 请求获取 json

html - HTML 模板中的 playframework JsValue

java - 如何在 Scala 中获取字符串的最后一个元音及其后面的任何单词?

Scala:什么是 CompactBuffer?

java - 如何在对象的 JSON 属性中排除(在输出类内部)?