Scala为JSON播放api - 从字符串化的JSON获取某些case类的数组?

时间:2017-11-01 23:55:33

标签: arrays json scala playscalajs

从我们的代码中,我们调用一些服务并返回字符串化的JSON作为结果。字符串化的JSON是一个“SomeItem”数组,其中只有四个字段--3个Longs和1个字符串

例如:

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

我一直在使用play API来使用隐式Writes / Reads读取值。但是我无法让它为Arrays工作。

例如,我一直试图解析响应中的值,然后将其转换为SomeItem case类数组,但它失败了:

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

我有

implicit val someItemReads = Json.reads[SomeItem]

但看起来它不起作用。我也尝试过建立一个Json.reads [Array [SomeItem]],但没有运气。

这应该有用吗?有关如何使其工作的任何提示?

1 个答案:

答案 0 :(得分:2)

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)

  }

}