Как анализировать и извлекать информацию из массива json с помощью json4s

В настоящее время я пытаюсь извлечь информацию из массива json, используя json4s (scala).

Пример данных выглядит следующим образом:

val json = """
  [
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]},
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]}
  ]
"""

И мой код выглядит следующим образом:

case class User(name: String, emails: List[String])
case class UserList(users: List[User]) {
  override def toString(): String = {
    this.users.foldLeft("")((a, b) => a + b.toString)
  }
}

val obj = parse(json).extract[UserList]
printf("type: %s\n", obj.getClass)
printf("users: %s\n", obj.users.toString)

На выходе получается:

type: class UserList
users: List()

Кажется, что данные не правильно получены. Есть ли проблема с моим кодом?

ОБНОВЛЕНИЕ: это работает по предложению @Kulu Limpa.


person yxjiang    schedule 21.11.2014    source источник


Ответы (1)


Ваш код правильный, за исключением того, что ваш JSON - это просто массив, следовательно, List[User]. Есть два способа исправить это с немного другим результатом:

Решение 1. Исправьте файл json так, чтобы

{"users": 
  [
    {"name": "Foo", "emails": ["[email protected]", "[email protected]"]},
    {"name": "Bar", "emails": ["[email protected]", "[email protected]"]}
  ]
}

Решение 2. Измените параметр типа извлечения на

val obj = parse(json).extract[List[User]]
person Kulu Limpa    schedule 21.11.2014