/ / JSON to Map [String, JsObject] с Play 2.0? - json, scala, playframework, playframework-2.0

JSON да Map [String, JsObject] с Play 2.0? - json, scala, playframework, playframework-2.0

Аз съм нов и за двете! & Scala, но аз се опитвам да направя услуга, която да свързва JSON заявката с Map [String, JsObject] (или Map [String, JsValue], аз не съм сигурен за разликата), и след това извеждам списък на клавишите рекурсивно през картата (за предпочитане като дърво).

Но имам стартови въпроси:

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

Това, което очаквам тук, е, че ключовете трябва да се запълнят с ключовете от заявката, но, разбира се, не се компилират.

Благодаря предварително, че помагате на Scala noob :-)

Nik

Отговори:

14 за отговор № 1

JsValue е основният клас за всички стойности на JSON. JsObject е подтип на JsValue (заедно с JsNull, JsUndefined, JsBoolean, JsNumber, JsString, и JsArray). Разгледайте спецификацията на JSON, ако неясно е: http://json.org/

Ако знаете, че 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)] така че можете да използвате map или collect да обработвате ключовете на обекта рекурсивно (между другото можете да използвате fields директно, тъй като е Seq[(String, JsValue)] и подкрепя map и collect както и).