bad*_*ala 4 scala playframework playframework-2.0
我正在尝试为JsValue添加一个新元素,但我不确定如何去做.
val rJson = Json.parse(response)
val imgId = //stuff to get the id :Long
rJson.apply("imgId", imgId)
Json.stringify(rJson)
Run Code Online (Sandbox Code Playgroud)
我应该转换为JSONObject还是有一些方法可以直接应用于JsValue以向JSON插入新元素?
编辑:
response来自另一台服务器,但我确实控制它.所以,如果我需要向"imgId"JSON对象添加一个空元素,那很好.
你可以这样做JsObject,扩展JsValue并有一个+方法:
val rJson: JsValue = Json.parse(response)
val imgId = ...
val returnJson: JsObject = rJson.as[JsObject] + ("imgId" -> Json.toJson(imgId))
Json.stringify(returnJson)
Run Code Online (Sandbox Code Playgroud)
我在我正在处理的项目中使用以下帮助器:
/** Insert a new value at the given path */
def insert(path: JsPath, value: JsValue) =
__.json.update(path.json.put(value))
Run Code Online (Sandbox Code Playgroud)
,可以用作JSON变换器:
val rJson = Json.parse(response)
val imgId = //stuff to get the id :Long
Json.stringify(rJson.transform(insert(__ \ 'imgId, imgId)))
Run Code Online (Sandbox Code Playgroud)
你绝对可以使用该insert方法的主体,但我个人认为变换器API真的是违反直觉的.
关于这一点的好处是可以使用任意数量的变换andThen.我们通常使用它将API响应转换为模型的格式,以便我们可以使用Reads反序列化器来实例化模型实例.我们使用这个insert帮助器来模拟尚不存在的API响应的部分,以便我们可以在API之前构建我们需要的模型.
即使API很复杂,我强烈建议花一些时间阅读有关JSON处理的Play框架文档,共5页.他们不是世界上最伟大的文档,但他们实际上非常彻底.