Play-json:更新数组中的对象属性时出错

时间:2015-08-09 20:37:57

标签: json scala playframework play-json

我正在玩play-json库来操纵我的json文件。我已经遵循了这个official document并且一切正常但是他们没有告诉我们想要更新数组中对象的值的情况,所以我正在尝试这个我自己的例子。

[
  {
    "key1": [
      {
        "key12": [
          {
            "key121": "text1",
            "key122": 121212,
            "key123": "text2",
            "key124": []
          }
        ],
        "key13": 0
      }
    ],
    "key2": "value2"
  }
]

在上面的示例中,我正在尝试更新“key123”的值但是一次又一次地出现此错误,只是无法找出我在哪里做错了:(

  

线程“main”中的异常java.util.NoSuchElementException:JsError.get       at play.api.libs.json.JsError.get(JsResult.scala:14)       在play.api.libs.json.JsError.get(JsResult.scala:13)       在Refactor.authPage(Refactor.scala:73)       在Builder $ .main(Builder.scala:36)       在Builder.main(Builder.scala)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:483)       在com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

这是我的代码。任何形式的帮助将不胜感激。

val transform = (((__ (0) \ 'key1)(0) \ 'key12)(0) \ 'key123).json.update(__.read[JsString].map(x => JsString("updated")))

val jsValue = Json.parse("example.json").transform(transform).get

1 个答案:

答案 0 :(得分:0)

我已经在互联网上做了一些研究,发现这个问题已经在播放邮件列表中讨论过,即使有ticket来解决这个问题。 play-json没有本机支持来更新数组中的值(你可以这样做,但它需要大量的工作,你需要更新完整的JsArray)。

然而,play-json目前没有基于数组索引的转换支持,有一个辅助库play-json-zipper,它支持所有这些功能和更多功能。 Play开发者已关闭上述票证,假设人们可以根据需要使用play-json-zipper

P.S:添加我自己的答案,以便如果有人通过谷歌搜索登陆这里,他们可以轻松找到解决方案。