使用JSON4S在重复节点上合并/组合JSON
在任何人将其标记为重复之前,我已经检查了这个问题: . (从那里复制示例) 我正在处理一个涉及合并json的案例,如下面的示例所示使用JSON4S在重复节点上合并/组合JSON,json,algorithm,scala,json4s,Json,Algorithm,Scala,Json4s,在任何人将其标记为重复之前,我已经检查了这个问题: . (从那里复制示例) 我正在处理一个涉及合并json的案例,如下面的示例所示 [{ "id" : 1, "name" : "abc", "nodes" :[ { "nodeId" : 20, "nodeName" : "test1" } ] }, {
[{
"id" : 1,
"name" : "abc",
"nodes" :[
{
"nodeId" : 20,
"nodeName" : "test1"
}
]
},
{
"id" : 1,
"name" : "abc",
"nodes" :[
{
"nodeId" : 21,
"nodeName" : "test2"
}
]
}]
直到叶子的节点
[{
"id" : 1,
"name" : "abc",
"nodes" :[
{
"nodeId" : 20,
"nodeName" : "test1"
},
{
"nodeId" : 21,
"nodeName" : "test2"
},
]
}]
我可以使用蛮力方法,递归地比较节点,手动合并成一个对象,最后转换成json字符串。我想知道使用json4s是否有更好的方法。
更多的上下文,这是一个scala项目,有1000个json要合并成一个,它们可能有嵌套的complext结构,比如数组和对象
这里的合并意味着添加到重复节点上预先存在的数据,而不是覆盖它们,如上面的示例所示
我也考虑过使用树,但进展不大。您可以使用
合并操作:
def main(args:Array[String]):单位={
val json=“”[{
|“id”:1,
|“名称”:“abc”,
|“节点”:[
| {
|“nodeId”:20,
|“节点名称”:“test1”
| }
| ]
| },
| {
|“id”:1,
|“名称”:“abc”,
|“节点”:[
| {
|“nodeId”:21,
|“nodeName”:“test2”
| }
| ]
|}]“”。条边距
val jsonArray=parse(json).asInstanceOf[JArray]
val res=jsonArray.arr.reduceLeft{(x,y)=>x merge y}
println(pretty(render(res)))
}
哪个输出:
{
"id":1,
"name":"abc",
"nodes":[{
"nodeId":20,
"nodeName":"test1"
},{
"nodeId":21,
"nodeName":"test2"
}]
}
您需要更清楚地了解您想要进行的处理。“重复节点”和“合并”是什么意思。要使两个节点重复,哪些数据必须相同?合并哪些数据以及如何合并?如果两个顶级对象是相同的呢?重复节点意味着相同深度级别上的公共关键点。合并策略如示例所示。合并应该从根节点到端节点进行。如果top键是公共的,则保留该键并检查子节点