5

私は両方のPlayに不慣れです!&Scalaですが、JSONリクエストをMap [String、JsObject](またはMap [String、JsValue]、区別がわかりません)にマップし、リストを出力するサービスを作成しようとしています。マップを介して再帰的に(できればツリーとして)キーを選択します。

しかし、私は開始の問題を抱えています:

def genericJSONResponse = Action(parse.json) {
  request => request.body
  var keys = request.keys
  Ok("OK")
}

ここで私が期待するのは、キーがリクエストからのキーで満たされることでしたが、もちろん、それはコンパイルされません。上記の説明を踏まえて、これにどのようにアプローチする必要がありますか?

Scalanoobを手伝ってくれてありがとう:-)

ニック

4

1 に答える 1

16

JsValueすべてのJSON値の基本クラスです。(、、、、、、、および)のJsObjectサブタイプです。不明な場合はJSON仕様を確認してください:http://json.org/JsValueJsNullJsUndefinedJsBooleanJsNumberJsStringJsArray

本文リクエストのJSONが(上記の他のタイプとは対照的に)JSONオブジェクトであることがわかっている場合は、次のようにパターンマッチングできます。

def genericJSONResponse = Action(parse.json) { request =>
  request.body match {
    case JsObject(fields) => Ok("received object:" + fields.toMap + '\n')
    case _ => Ok("received something else: " + request.body + '\n')
  }
}

fields.toMapは必要なタイプです。オブジェクトのキーを再帰的に使用または処理Map[(String, JsValue)]できるようにします。(ちなみに、それはとをサポートしているので、直接使用することもできます)。mapcollectfieldsSeq[(String, JsValue)]mapcollect

于 2012-04-04T20:05:23.437 に答える