15
{
  "people": [
    {
      "name": "Jack",
      "age": 15
    },
    {
      "name": "Tony",
      "age": 23
    },
    {
      "name": "Mike",
      "age": 19
    }
  ]
}

これは、私が解析しようとしているjsonのサンプルです。一人一人にforeach操作をして、名前と年齢を印刷できるようにしたいと思います。

単一のアイテムまたは特定の番号のアイテムである場合に、json配列を処理する方法を知っています。すべてのアイテムを反復処理する方法がわかりません。

誰かが私を助けることができますか?

4

2 に答える 2

25

PlayJSONライブラリを使用してこれを行う方法はたくさんあります。主な違いは、Scalaケースクラスの使用法かどうかです。

単純なjsonが与えられた

val json = Json.parse("""{"people": [ {"name":"Jack", "age": 19}, {"name": "Tony", "age": 26} ] }""")

ケースクラスとJsonマクロを使用して、データを自動的に解析できます

import play.api.libs.json._

case class People(name: String, age: Int)

implicit val peopleReader = Json.reads[People]
val peoples = (json \ "people").as[List[People]]
peoples.foreach(println)

またはケースクラスなしで、手動で

import play.api.libs.json._
import play.api.libs.functional.syntax._

implicit val personReader: Reads[(String, Int)] = (
  (__ \ "name").read[String] and 
  (__ \ "age").read[Int]
).tupled
val peoples = (json \ "people").as[List[(String, Int)]]
peoples.foreach(println)

言い換えれば、この主題に関する非常に完全なドキュメントを確認してください:) http://www.playframework.com/documentation/2.1.0/ScalaJson

于 2013-03-26T18:46:18.373 に答える
4

オブジェクトタイプがない場合、または読み取りを書き込みたくない場合は、次を使用できます。.as[Array[JsValue]]

val jsValue = Json.parse(text)
val list = (jsValue \ "people").as[Array[JsValue]]

それで

list.foreach(a => println((a \ "name").as[String]))

古いバージョン(2.6.x)では使用できます.as[List[JsValue]]が、新しいバージョンはアレイのみをサポートします。

于 2018-03-18T10:15:16.397 に答える