Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 在Scala Play中将JSArray对象解析为对象列表_Json_Scala_Playframework_Playframework Json - Fatal编程技术网

Json 在Scala Play中将JSArray对象解析为对象列表

Json 在Scala Play中将JSArray对象解析为对象列表,json,scala,playframework,playframework-json,Json,Scala,Playframework,Playframework Json,我有以下JSON: [{“id_str”:“67979542”,“name”:“account”},{“id_str”:“12345678”,“name”:“account2”},{“id_str”:“3423423”,“name”:“account3”}] 已将其解析为包含3个元素的play.api.libs.json.JsArray对象 我想用以下代码将此JsArray解析为我的自定义对象组: case class Group(id: String, name: String) im

我有以下JSON:

[{“id_str”:“67979542”,“name”:“account”},{“id_str”:“12345678”,“name”:“account2”},{“id_str”:“3423423”,“name”:“account3”}]

已将其解析为包含3个元素的play.api.libs.json.JsArray对象

我想用以下代码将此JsArray解析为我的自定义对象

 case class Group(id: String, name: String)

  implicit val twitterGroupReads: Reads[Group] = (
    (JsPath \\ "id_str").read[String] and
    (JsPath \\ "name").read[String]
    )(Group.apply _)

但是我不知道如何使用库从数组中获取所有元素并将它们解析到我的自定义对象中。

Play JSON框架用于处理JSON,其中包括
Reads.traversableReads
,它将隐式地用于反序列化可以隐式地找到
Reads
对象的其他类型的集合。您编写了一个适当的
读取对象。所以除非我遗漏了什么,否则你可以走了:

scala> import play.api.libs.json._
import play.api.libs.json._

scala> import play.api.libs.functional.syntax._
import play.api.libs.functional.syntax._

scala> case class Group(id: String, name: String)
defined class Group

scala> implicit val twitterGroupReads: Reads[Group] = (
     |     (JsPath \\ "id_str").read[String] and
     |     (JsPath \\ "name").read[String]
     |     )(Group.apply _)
twitterGroupReads: play.api.libs.json.Reads[Group] = play.api.libs.json.Reads$$anon$8@f2fae02

scala> val json = Json.parse("""[{"id_str":"67979542","name":"account"}, {"id_str":"12345678","name":"account2"}, {"id_str":"3423423423","name":"account3"}]""")
json: play.api.libs.json.JsValue = [{"id_str":"67979542","name":"account"},{"id_str":"12345678","name":"account2"},{"id_str":"3423423423","name":"account3"}]

scala> json.as[Seq[Group]]
res0: Seq[Group] = List(Group(67979542,account), Group(12345678,account2), Group(3423423423,account3))

需要补充的一点是:如果您可以在JSON和Scala类中使用完全相同的字段名,那么就不需要自定义的
Reads
实现,您的JSON转换代码变得非常简单:
implicit val Reads=JSON.Reads[Group]
。例子: