如何在Play中的jsValue中添加Scala变量的值?

时间:2014-08-21 19:13:53

标签: json scala playframework

我们说我有val numOpen = 5

现在我有一个JsValue,其键值必须是numOpen的值:

StackOverflow说这篇文章的代码太多了,尽管它并不是真的很多。查看完整的JSON here

如何在此JSON中插入Scala变量的值作为"值"的值?谢谢!

1 个答案:

答案 0 :(得分:1)

JsObject作为++方法播放,您可以投射JsValue并更新字段:

val numOpen = 5
var data1: JsValue = Json.parse( """
  {
    "value": 64, // THIS REALLY NEEDS TO BE "value" : numOpen
    "color":"#F7464A",
    "highlight": "#FF5A5E",
    "label": "Open"
  }
  """)

val t: JsObject = data1.as[JsObject] ++ Json.obj("value" -> numOpen)

如果您愿意,可以将其强制转换回JsValue

t.as[JsValue]

如果你有嵌套值,我所知道的唯一方法是使用嵌套的Json.obj

var data1: JsValue = Json.parse( """
  {
    "value": 64,
    "color":"#F7464A",
    "highlight": "#FF5A5E",
    "label": {
      "value": 54
    }
  }
""")


val t: JsObject = data1.as[JsObject] ++ Json.obj("label" -> Json.obj("value" -> 5))

println(t.as[JsValue].toString())

输出:

{"value":64,"color":"#F7464A","highlight":"#FF5A5E","label":{"value":5}}

我不知道是否有更简单的方法可以做到这一点。