【问题标题】:Scala play api for JSON - getting Array of some case class from stringified JSON?Scala play api for JSON - 从字符串化的 JSON 中获取某些案例类的数组?
【发布时间】:2017-11-01 23:55:33
【问题描述】:

从我们的代码中,我们调用一些服务并返回字符串化的 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 通过隐式写入/读取来读取值。但我无法让它为 Arrays 工作。

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

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

我有

implicit val someItemReads = Json.reads[SomeItem]

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

这应该有效吗?关于如何使它工作的任何提示?

【问题讨论】:

    标签: arrays json scala playscalajs


    【解决方案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)
    
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2017-12-25
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多