首页 > 解决方案 > 编写未包装的 json 数组 - Jackson

问题描述

我们如何在 Jackson 中编写未包装的 JsonNode 数组?下面是一个示例代码:

val message = """{"Type": "Type1","MessageId": "MessageId1"}"""
val msgNode = objectMapper.readTree(message)
val msgNodes = List(msgNode, msgNode).asJavaCollection
val arrayNode = objectMapper.createArrayNode()
arrayNode.addAll(msgNodes)
objectMapper.writeValueAsString(arrayNode)

上面的代码将打印由方括号包裹的字符串数组,例如:

[{"Type":"Type1","MessageId":"MessageId1"},{"Type":"Type1","MessageId":"MessageId1"}]

我正在寻找的是上面的展开版本,基本上是这样的:

{"Type":"Type1","MessageId":"MessageId1"},{"Type":"Type1","MessageId":"MessageId1"}

有人可以帮忙吗?如果消息是 POJO 类,并且我们希望对 POJO 数组进行解包输出,我们如何扩展它?

标签: scalajackson

解决方案


您可以输出数组的每个项目并用逗号连接:

msgNodes
  .map(msg => objectMapper.writeValueAsString(msg))
  .mkString(",")

要为任何类中的任何数组自动执行此操作,您可能必须查看其他库,这些库提供了在特定范围内以自定义方式描述数组序列化程序的可能性(例如Writes在 Play-Json 中)。


推荐阅读