如何将新项追加到现有的JSON变量?

时间:2017-12-26 06:35:52

标签: json scala playframework

鉴于以下json:

{
    "status": "ok",
    "user": {
        "id": 39216,
        "first_name": "naghmeh",
        "username": "test",
    }
}

我想将新项目附加到用户JSON变量。并创建一个新的json,如:

{
    "status": "ok",
    "user": {
        "id": 39216,
        "first_name": "naghmeh",
        "username": "test",
        "point":10
    }
}

3 个答案:

答案 0 :(得分:1)

假设您的问号标签表明您正在使用PlayJSON库,您只需使用+

val json: JsObject = ... // Your initial value here
val newField: JsValue = ... // Your new value here
val jsonWithAdditionalField = json + ("yourKey" -> newField)

有关如何创建JsValue的详细信息,请查看official documentation

答案 1 :(得分:1)

您可以使用Play Json API实现此目的。

首先,您需要将json字符串解析为Play JsValue

import play.api.libs.json._

val jsonString =
  """
    |{
    |    "status": "ok",
    |    "user": {
    |        "id": 39216,
    |        "first_name": "naghmeh",
    |        "username": "test"
    |    }
    |}
  """.stripMargin

val jsValue = Json.parse(jsonString)

现在,您可以通过遍历Json然后修改它来将值添加到JsValue。

val result = jsValue match {
  case jsObject: JsObject => (jsObject \ "user").as[JsObject] match {
    case userJsObject: JsObject => jsObject ++ Json.obj(
      "user" -> (userJsObject ++ Json.obj(
        "point" -> 10
      ))
    )
    case _ => jsValue
  }
  case _ => jsValue
}

或者,使用Play Json的JsonTransformer API,

val jsonTransformer = (__ \ "user").json.update(
  __.read[JsObject].map(jsObject => jsObject ++ Json.obj("point" -> 10))
)

val result2 = jsValue.transform(jsonTransformer) match {
  case JsSuccess(jsObject, _) => jsObject
  case _ => jsValue
}

答案 2 :(得分:-1)

将列表附加到变量,然后像这样调用put:

list.put("test");