0

私は Play 2.0 プロジェクトで .json ファイルを解析してきましたが、理解できないことが 1 つあります。オンライン ドキュメントの抜粋を次に示します。

{
  "users":[
    {
      "name": "Bob",
      "age": 31.0,
      "email": "bob@gmail.com"
    },
    {
      "name": "Kiki",
      "age":  25.0,
      "email": null
    }
  ]
}

私が知りたいのは、1 人のユーザー全体を取得するにはどうすればよいかということです。問題は、1 人のユーザーを表すパラメーターのグループを参照する方法がわからないことです。私は次のようなものを試しました

( json \\ "users" ) 

すべてのユーザーをリスト内の単一の要素として提供するだけで、次のようなことを試しました

( json \ "users" \ (user)(0)) 

しかし、「ユーザー」を定義する必要があるようで、何が適切かわかりません。

さらに良いことに、リスト内のすべての顧客を取得する方法はありますか? または、特定のユーザーのすべての情報に一度にアクセスできるように、ツリーを反復処理して各ユーザーにアクセスするだけですか?

4

2 に答える 2

1

JSONにオブジェクトのリストが含まれていることがすでにわかっている場合は、を使用して、その要素を1つとして抽出するように要求できますas[List[JsObject]]

例えば:

val str = """{
  "users":[
    {
      "name": "Bob",
      "age": 31.0,
      "email": "bob@gmail.com"
    },
    {
      "name": "Kiki",
      "age":  25.0,
      "email": null
    }
  ]
}"""

val json = Json.parse(str)
val users = (json \ "users").as[List[JsObject]]
users.foreach { user =>
  println("user: " + user)
}

生成:

user: {"name":"Bob","age":31.0,"email":"bob@gmail.com"}
user: {"name":"Kiki","age":25.0,"email":null}

これらの各リスト要素は、元のJSONオブジェクトと同じ演算子をサポートしているため(user \ "name").as[String]、などを使用して個々の値を抽出できます。

于 2013-01-24T05:48:29.003 に答える
0

Jerkson JSON (Play で使用されている JSON ライブラリ) は、次の方法をサポートしています。

(json \ "users")(0)

反復したい場合は、それを JArray にキャストして (おそらく型をチェックして)、elementsメソッドを呼び出すことができます。

(json \ "users").asInstanceOf[JArray].elements foreach {
    ...
}

おそらくこれ以上の方法はありません: https://github.com/codahale/jerkson/blob/master/src/main/scala/com/codahale/jerkson/AST.scala

于 2013-01-20T06:53:59.060 に答える