Фильтрация и обновление JSON в Scala - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующий 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. Тогда я использовал это

Скала

    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) 

но не работает ..

Любой совет, пожалуйста.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Спасибо за помощь. Это действительно помогло мне лучше понять, как это работает.

Я нашел решение.

Просто нужно изменить трансформатор на этот:

Scala

val jsonTransformer2 = (__ \ 'components \ 'actions).json.update((__ \ 'components \ 'actions).json.put(JsArray(filteredActions)))

Еще раз спасибо всем.

0 голосов
/ 27 октября 2018

каких результатов вы ожидаете?
если вы просто хотите удалить действие /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"
        }
      }
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...