我有以下JSON
Json
{
"components": {
"id": "application",
"actions": [{
"action": "/show-dashboard",
"text": {
"en": "Dashboard",
"es": "Dashboard-ES"
}
}, {
"action": "/showContact",
"text": {
"en": "Personal",
"es": "Personal-ES"
}
}, {
"action": "/showSummary",
"text": {
"en": "Summary",
"es": "Summary-ES"
}
}]
}
}
我需要过滤动作。只有两个是可能的(此json较小,原始有20多个动作)
所以我有一个名为json的JsObject。然后我用了
斯卡拉
val filteredActions = (components \\ "actions").head.as[List[JsValue]].filter{ _.\("action").as[String] match {
case "/showContact" => true
case "/showSummary" => true
case _ => false
}}
所以我在filteredActions中有一个过滤了动作的json字符串,现在我需要更新组件并将当前动作替换为该动作。
我已经尝试过了
斯卡拉
val jsonTransformer2 = (__ \ 'components \ 'actions).json.update((__ \ 'components).json.put(Json.arr(filteredActions)))
val filtered = components.transform(jsonTransformer2)
但是不起作用。
请提供任何建议。
预先感谢
答案 0 :(得分:0)
您期望得到什么结果?
如果您只想删除操作
/show-dashboard
val jsonTransformer2 = (__ \ 'components \ 'actions).json.put(JsArray(filteredActions))
val filtered = components.transform(jsonTransformer2)
println(filtered.get)
//结果
{
"components": {
"actions": [
{
"action": "/showContact",
"text": {
"en": "Personal",
"es": "Personal-ES"
}
},
{
"action": "/showSummary",
"text": {
"en": "Summary",
"es": "Summary-ES"
}
}
]
}
}
答案 1 :(得分:0)
感谢您的帮助。它确实帮助我更好地了解了它的工作原理。
我找到了解决方法。
只需将变压器更改为此:
斯卡拉
val jsonTransformer2 = (__ \ 'components \ 'actions).json.update((__ \ 'components \ 'actions).json.put(JsArray(filteredActions)))
再次感谢大家。