0
하나의 json에서 다른 json으로 데이터를 병합하려면 scala lift를 사용하십시오. 아래 예제에서 "jsonGroups"에서 "tom"과 "dan"그룹의 일부를 모두 집계하여 grpCount를 "jsonNames"에 삽입합니다. println (newJson)은 finalOutput과 같아야합니다. 효율적인 방법은 무엇입니까? 나는 코드의 줄이 훨씬 줄어들 수 있다는 것을 알고있다.스칼라 리프트를 사용하여 효율적으로이를 수행하는 방법은 무엇입니까?
val jsonNames = """
{
"id" : "1B23423B",
"payload" : {
"list" : [ {
"age" : "30",
"name" : "tom",
}, {
"age" : "35",
"name" : "dan"
}]
}
}
"""
val jsonGroups = """
{
"id" : "1B23423B",
"payload" : {
"list" : [ {
"group" : "baseball",
"name" : "tom",
}, {
"group" : "basketball",
"name" : "tom"
}, {
"group" : "football",
"name" : "dan"
}, {
"group" : "hockey",
"name" : "dan"
}, {
"group" : "football",
"name" : "dan"
}]
}
}
"""
val finalOutput = """
{
"id" : "1B23423B",
"payload" : {
"list" : [ {
"age" : "30",
"name" : "tom",
"groupCnt" : 2
}, {
"age" : "35",
"name" : "dan",
"groupCnt" : 3
}]
}
}
"""
val jsGroups = parse(jsonGroups)
val groupList = jsGroups \ "payload" \ "list"
val groupMap = new HashMap[String, Int]
groupList.children.foreach { g =>
val group = (g \ "group").values.toString
val name = (g \ "name").values.toString
Option(groupMap.get(name)) match {
case Some(x) =>
groupMap.put(name, x + 1)
case None =>
groupMap.put(name, 1)
}
}
val jsNames = parse(jsonNames)
val newJson = jsNames.transform({
case dataObject @ JObject(fields) if fields.contains(JField("name", JString(name)))) =>
val groupCnt = groupMap.get(name)
dataObject.merge(("groupCnt" -> groupCnt))
})
println (pretty(render(newJson)))
내가 병합 기능을 사용할 수 있지만, "톰"과 "단"이 그룹에 속하고 첫 번째 json으로 그룹 수를 병합하는 횟수를 어떻게 계산합니까? –
* 대답을 편집했습니다 – VasyaNovikov
질문을 업데이트했습니다. 내 예제 논리를 기반으로 오전? –