1

我正在使用 play-json 库来操作我的 json 文件。我已经关注了这个官方文档,一切正常,但他们没有告诉我们何时要更新数组中对象的值,所以我正在尝试我自己的示例。

IE

[
  {
    "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) 处的 JsError.get(JsResult.scala:14) at play.api.libs.json.JsError.get(JsResult.scala :13) 在 Refactor.authPage(Refactor.scala:73) 在 Builder$.main(Builder.scala:36) 在 Builder.main(Builder.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun。 reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 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
4

1 回答 1

0

我在互联网上做了一些研究,发现这个问题已经在 play mailing list 上讨论过,甚至有一张可以解决这个问题。play-json 不支持更新数组中的值(你可以这样做,但它需要大量的工作,你需要更新完整的 JsArray)。

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

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

于 2015-08-10T06:58:16.017 回答