2013-03-26 2 views
13
"people": [ 
{ 
    "name": "Jack", 
    "age": 15 
}, 
{ 
    "name": "Tony", 
    "age": 23 
}, 
{ 
    "name": "Mike", 
    "age": 19 
} 
] 

これは、私が解析しようとしているjsonのサンプルです。私はそれぞれの人にforeach操作を行い、その名前と年齢を印刷できるようにしたい。Play2とScalaのJSON配列を使ったForeach

json配列が単一の項目または特定の番号付き項目の場合にどのように処理するのか分かります。私はすべての項目を反復する方法を知らない。

誰でもお手伝いできますか?

+0

注:JSONのライブラリは、Playと統合されているものとはまったく別物です。しかし、私はしたくないです。 – Commander

答えて

23

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

あなたは他に

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) 

手動、自動でデータ

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) 

またはケースクラスなしを解析するマクロケースクラスとJSONを使用することができ、単純なJSON

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

考えます単語、この件に関する非常に完全な文書を確認してください:) http://www.playframework.com/documentation/2.1.0/ScalaJson

+0

私の実際のユースケースは、私が与えたjsonサンプルより少し複雑です。名前を読むだけで、年齢を完全に無視することは可能ですか?または、あなたは常にjson全体をscala caseクラスに変換する必要がありますか? – Commander

+1

'(json \" people "\\" name ")'? –

+0

これは私にとってはうまくいかなかった。 List [People]のデシリアライザは存在しないと言っています。 Json.readsも私のためには機能しませんでした。私はPlay 2.0.4にいる – Commander

関連する問題