У меня есть следующий 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 действий)
Итак, у меня есть JsObject, называемый компонентами с этим json. Тогда я использовал это
Scala
val filteredActions = (components \\ "actions").head.as[List[JsValue]].filter{ _.\("action").as[String] match {
case "/showContact" => true
case "/showSummary" => true
case _ => false
}}
Итак, у меня есть в filterActions строка json с отфильтрованными действиями, теперь мне нужно обновить компоненты и заменить текущие действия на это.
Я пробовал это:
Scala
val jsonTransformer2 = (__ \ 'components \ 'actions).json.update((__ \ 'components).json.put(Json.arr(filteredActions)))
val filtered = components.transform(jsonTransformer2)
Но не работает ..
Любой совет, пожалуйста.
заранее спасибо
Я использую play.api.libs.json._ для scala 2.4
Как именно не работает? Выдает исключения или просто не обновляет полезную нагрузку?
Сгенерирован неправильный JSON
каких результатов вы ожидаете?
если вы просто хотите убрать действие /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"
}
}
]
}
}
Привет, спасибо, это хороший прогресс. но я теряю идентификатор. Вот что я получаю:> Json {"components": {"actions": [{"action": "/ showContact", "text": {"en": "Personal», "es": "Personal -ES "}}, {" action ":" / showSummary "," text ": {" en ":" Summary "," es ":" Summary-ES "}}]}}
Спасибо за помощь. Это действительно помогло мне лучше понять, как это работает.
Я нашел решение.
Просто нужно сменить трансформатор на такой:
Scala
val jsonTransformer2 = (__ \ 'components \ 'actions).json.update((__ \ 'components \ 'actions).json.put(JsArray(filteredActions)))
Еще раз спасибо всем.
Привет, Алехандро, какую json-библиотеку вы используете?