Аз съм нов и за двете! & 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 за отговор № 1JsValue
е основният клас за всички стойности на 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
както и).