【问题标题】:How do I add a Scala variable's value to a jsValue in Play?如何将 Scala 变量的值添加到 Play 中的 jsValue?
【发布时间】:2014-08-21 19:13:52
【问题描述】:

假设我有val numOpen = 5

现在我有一个 JsValue,它有一个键,其值需要是 numOpen 的值:

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

如何在这个 JSON 中插入 Scala 变量的值作为“值”的值?谢谢!

【问题讨论】:

    标签: json scala playframework


    【解决方案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}}
    

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

    【讨论】:

    • 谢谢。我觉得这很接近,但它仍然没有工作。这可能是因为真正的var data1 是由 3 组值、颜色、突出显示和标签组成的列表。我不确定如何更新特定集合的值。
    • 能把真实的json加到问题里吗?
    • 真正的json是here。感谢您的帮助,@Ende-Neu!我很感激!
    • 嗯,您可以使用as[JsArray] 访问该值,但很难用更改后的值重建 Json,可能其他人有更好的主意。
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2012-06-14
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多