java - 合并列表中的多个 JObject - Json4s
问题描述
我正在尝试将多个 JObject 合并为一个 JObject。我有一个 JObject 列表,我试图对其进行迭代并将它们中的每一个合并到一个对象中,本质上是创建一个大型 json 对象。
下面的工作正常,但是在列表中它不起作用。我知道我做错了什么,但不确定是什么?
val obj1: JObject = RancherHelper.convertToJObject(containers.head)
val obj2: JObject = RancherHelper.convertToJObject(containers(1))
val obj3: JObject = RancherHelper.convertToJObject(containers(2))
val x: JObject = obj1 merge obj2 merge obj3
这不起作用:
def mergeJObjects(containers: List[JObject]): JObject = {
val fullJsonObject: JObject = JObject()
val singleObject = for{
container <- containers
fullObj = fullJsonObject.merge(container)
} yield fullObj
fullJsonObject
}
解决方案
与其映射列表,不如折叠它:
def mergeJObjects(containers: List[JObject]): JObject = {
containers.foldLeft(JObject())((merged, next) => merged.merge(next))
}
你上面写的是语法糖:
val fullJsonObject = JObject()
val singleObject = containers.map { container =>
val fullObj = fullJsonObject.merge(container)
fullObj
}
fullJsonObject
本质上,您是在容器列表上进行映射,并且对于每个容器,您都将它与一个空的 JSON 对象 ( fullJsonObject
) 合并。因此与 ;singleObject
没有什么不同containers
。它是您的原始 JSON 对象的列表。此外,由于fullJsonObject
它是不可变的empty JObject
,因此您只需在方法结束时返回空 JSON 对象。
推荐阅读
- php - 路径组件上缺少 AWS Apache 搜索权限
- android - USB 调试不适用于 MK809V Android 棒
- java - Android:将 JSON 数据存储在单例中以在活动之间传递?
- r - R 代码 adehabitatHR - 网格对于 kernelUD /getverticeshr/adehabitatHR 家庭范围估计来说太小了
- django - 时间数据与格式 YYYY-MM-DD 不匹配
- ruby-on-rails - 使用验证更新模型 Rails 3.2
- vb.net - 调用程序集状态为“Public Sub [Operator]”的函数?
- neural-network - 监督神经网络
- c++ - 在发布版本(O3)上调用“libucis.so”时“free():无效指针”,我的代码从未到达
- .net-core - 服务器端 Blazor App 能否运行 .Net Core 2.1