繁体   English   中英

播放json:更新数组内的对象属性时出错

[英]Play-json: Error on updating an object attribute inside an array

我正在玩play-json库来操纵我的json文件。 我已经遵循了这份正式文档,并且一切正常,但是他们没有告诉我们何时要更新数组中对象的值,因此我尝试使用我自己的示例。

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

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

线程“主”中的异常java.util.NoSuchElementException:play.api.libs.json.JsError.get(JsResult.scala:14)处为play.api.libs.json.JsError.get(JsResult.scala)处为JsError.get :13)在Builder $ .main(Rebuild.scala:36)在Refactor.authPage(Refactor.scala:73)在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)在Builder.main(Builder.scala)在sun.reflect.NativeMethod com.intellij.rt处java.lang.reflect.Method.invoke(Method.java:483)上的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)上的reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) .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

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

但是play-json目前不支持基于数组索引的转换,有一个辅助库play-json-zipper ,它支持所有此类功能以及更多功能。 假设人们可以根据需要使用play-json-zipper ,Play开发人员已关闭上述票证。

PS:添加我自己的答案,以便如果有人通过Google搜索降落在这里,他们可以轻松找到解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM