scala lift json: совпадение шаблона с неизвестными данными?

#json #scala #pattern-matching #lift #case-class

#json #scala #сопоставление с шаблоном #поднимать #случай-класс

Вопрос:

У меня есть какой-то странный json, который я не могу изменить, и я хочу разобрать его с помощью JsonParsen в lift.

Типичный json похож:

     {"name":"xxx",  "data":{
        "data_123456":{"id":"Hello"},
        "data_789901":{"id":"Hello"},
        "data_987654":{"id":"Hello"},  
}}
  

Проблема в том, что ключи для данных неизвестны (data_xxxxx, где xx: s
неизвестны).
Это плохой json, но мне приходится с этим жить.

Как я должен настроить case-классы в scala, чтобы иметь возможность создавать надлежащую структуру, когда ключи здесь неизвестны, но структура известна?

Ответ №1:

Вы можете использовать Map, и каждое значение также может быть JValue, представляющим неотправленный JSON. Пример:

 case class Id(id: String)
case class Data(name: JValue, data: Map[String, Id])
  

И затем:

 json.extract[Data]
res0: Data(JString(xxx),Map(data_123456 -> Id(Hello), data_789901 -> Id(Hello), data_987654 -> Id(Hello)))