json - play 框架 - 如何更新 json 索引数组项

标签 json playframework

我在将 json 对象添加到数组项时遇到问题。这个问题困扰了我很长一段时间,但我仍然不知道如何解决。

我想在数组项中添加一个json对象,下面是现有的json对象:

{
  "key1":[ 
          {"key11":"value11"},
          {"key12":"value12"}
         ]
}

我希望使用添加的新 json 对象对其进行转换:

{
   "key1":[ 
           {"key11":"value11" , "key111":"value111"},
           {"key12":"value12"}
         ]
}

这是我的代码:

val json = Json.obj( 
         "key1" ->Json.arr(
                        Json.obj("key11" -> "value11"),
                        Json.obj("key12" -> "value12")
         )
)

val transform= (__ \ 'key1 )(0).json.update(  __.read[JsObject].map{ o => o ++ Json.obj( "key111" -> "value111" ) } )

json.validate(transform)

但是最后一行给出了以下异常。有没有人可以给我建议如何实现将 json 对象添加到数组项中的目标?

java.lang.RuntimeException: expected KeyPathNode
at play.api.libs.json.JsPath$.step$1(JsPath.scala:141)
at play.api.libs.json.JsPath$.step$1(JsPath.scala:144)
at play.api.libs.json.JsPath$.play$api$libs$json$JsPath$$buildSubPath$1(JsPath.scala:150)
at play.api.libs.json.JsPath$$anonfun$createObj$1.apply(JsPath.scala:155)
at play.api.libs.json.JsPath$$anonfun$createObj$1.apply(JsPath.scala:153)
at scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:51)
at scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:60)
at scala.collection.mutable.WrappedArray.foldLeft(WrappedArray.scala:34)
at play.api.libs.json.JsPath$.createObj(JsPath.scala:153)
at play.api.libs.json.PathReads$$anonfun$jsUpdate$1$$anonfun$apply$15.apply(JsConstraints.scala:81)
at play.api.libs.json.PathReads$$anonfun$jsUpdate$1$$anonfun$apply$15.apply(JsConstraints.scala:81)
at play.api.libs.json.JsResult$class.map(JsResult.scala:73)

感谢您的聆听

西里尔

最佳答案

您需要选择整个数组并将其转换为一个新数组,如下所示:

val transform= (__ \ "key1" ).json.update(
  __.read[JsArray].map { a => 
    JsArray(a.value.updated(0, a(0).as[JsObject] ++ Json.obj("key111" -> "value111")))
  }
)

关于json - play 框架 - 如何更新 json 索引数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907348/

相关文章:

javascript - 从 JSON 对象中删除空格,但不在引号内

json - 在剑道网格中显示动态图像

java - 如何在不使用 JSP 的情况下将 Java 数组分配或初始化为 Javascript 数组?

jquery - 如何将 Play Framework 1.x 项目迁移到 2.0

javascript - 玩!框架 : Best practice to use URLs in separate JavaScript files?

javascript - 将两个或多个 JSON 对象数组合并到一个数组中,保持唯一性

java - 使用jackson解析时如何防止多余的字符串转换步骤?

javascript - Angular js : Filter unique values and new json

playframework - Play Framework : Cannot load the JNotify native library

classpath - 在 Play Framework 应用程序中设置类路径顺序