Scala play api для JSON - получение массива некоторого класса case из строкового JSON?

Из нашего кода мы вызываем некоторый сервис и в результате получаем обратно строковый JSON. Строковый JSON состоит из массива SomeItem, в котором всего четыре поля - 3 Long и 1 String.

Пример:

[
{"id":33,"count":40000,"someOtherCount":0,"someString":"stuffHere"},
{"id":35,"count":23000,"someOtherCount":0,"someString":"blah"},
...
]

Я использовал Play API для чтения значений, используя неявные записи / чтения. Но у меня проблемы с тем, чтобы заставить его работать на Массивы.

Например, я пытался разобрать значение из ответа, а затем преобразовать его в массив классов случая SomeItem, но это не удалось:

val sanityCheckValue: JsValue: Json.parse(response.body) 
val Array[SomeItem] = Json.fromJson(sanityCheckValue)

я имею

implicit val someItemReads = Json.reads[SomeItem]

Но похоже, что это не работает. Я также пытался настроить Json.reads[Array[SomeItem]], но безуспешно.

Должно ли это работать? Любые советы о том, как заставить это работать?

1 ответ

Решение
import play.api.libs.json._

case class SomeItem(id: Long, count: Long, someOtherCount: Long, someString: String)

object SomeItem {
  implicit val format = Json.format[SomeItem]
}

object PlayJson {
  def main(args: Array[String]): Unit = {

    val strJson =
    """
      |[
      |  {"id":33,"count":40000,"someOtherCount":0,"someString":"stuffHere"},
      |  {"id":35,"count":23000,"someOtherCount":0,"someString":"blah"}
      |]
    """.stripMargin

    val listOfSomeItems: Array[SomeItem] = Json.parse(strJson).as[Array[SomeItem]]

    listOfSomeItems.foreach(println)

  }

}
Другие вопросы по тегам