Я хочу объединить данные из одного json в другой json, используя scala lift. В примере ниже, в «jsonGroups», я хочу считать, что все группы «tom» и «dan» являются частью и вставляют grpCount в «jsonNames». Для println (newJson) необходимо значение finalOutput. Что такое эффективный способ сделать это? Я знаю, что это может быть уменьшено до гораздо меньших строк кодаЧто такое эффективный способ сделать это с помощью scala lift?
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)))
Я знаю, что могу использовать функцию слияния, но как я могу подсчитать количество раз, когда «tom» и «dan» принадлежит к группе и объединяют счет группы в первый json? –
* отредактировал ответ – VasyaNovikov
Я обновил вопрос .. am i off, основанный на моем примере логики? –