#json #scala #playframework-2.3
#json #scala #playframework-2.3
Вопрос:
Я не могу понять, есть ли способ преобразовать фрагмент JSON (в виде строки) в Map[Symbol,Any]
используемую play.api.libs.json
библиотеку, где Any
может быть a Int
, a Double
, a String
или a вложенный Map[Symbol,Any]
.
Может кто-нибудь дать мне подсказку, чтобы получить это?
Комментарии:
1. Это возможно, но есть так много лучших способов работы с JSON в Play.
2. Я знаю Трэвиса, но конкретный сценарий, с которым я сталкиваюсь, очень хорошо подходит для этого подхода.
Ответ №1:
JsObject.fieldSet
даст вам a Set[(String, JsValue)]
, который вы можете преобразовать в Map[Symbol, Any]
. Вам нужно будет сопоставить шаблоны для всех возможных подклассов JsValue
и преобразовать каждый из них в нужный вам тип.
Например, что-то вроде этого:
Json.parse(text) match {
case js: JsObject =>
js.fieldSet.map {
case (key, value) => Symbol(key) -> transform(value)
}.toMap
case x => throw new RuntimeException(s"Expected object json but got $text")
}
def transform(jsValue): Any = jsValue match {
case JsNumber(value) => value.toDouble
...ect...
}