我在将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"))) } )