gpt4 book ai didi

json - JsPath.json.update 不适用于路径(IdxPathNode)中的数组元素?

转载 作者:行者123 更新时间:2023-12-02 18:24:05 25 4
gpt4 key购买 nike

是我的眼睛欺骗了我,还是我不能使用中间包含数组元素的 JsPath 来更新嵌套节点? (例如/a/b(0)/c)

val pnJson = Json.parse("""{"a": {"b": [ {"c": { "d": 1 } } ] } } """)                                     
val pnJsPath = (__ \ "a" \ "b")(0) \ "c"
val pnTrans = pnJsPath.json.update ( __.read[JsObject].map{ _ ++ Json.obj( "e" -> 2 )} )

pnJson.transform(pnTrans)

//结果:java.lang.RuntimeException:预期的KeyPathNode

如果我不能使用 __.json.update,我该如何完成这个? 尝试通过不变性来实现这一目标。

最佳答案

简短的答案是 you can't do that with JsPath 。该票提到使用 JsZipper库作为操作 JSON 的更好方法。如果您选择使用它,您可以执行以下操作:

scala> import play.api.libs.json.extensions._
import play.api.libs.json.extensions._

scala> import play.api.libs.json.monad.syntax._
import play.api.libs.json.monad.syntax._

scala> val pnJson = Json.parse("""{"a": {"b": [ {"c": { "d": 1 } } ] } } """)
pnJson: play.api.libs.json.JsValue = {"a":{"b":[{"c":{"d":1}}]}}

scala> val pnJsPath = (__ \ "a" \ "b")(0) \ "c"
pnJsPath: play.api.libs.json.JsPath = /a/b(0)/c

scala> pnJson.update(pnJsPath, _.set(__ \ "e" -> JsNumber(2)))
res0: play.api.libs.json.JsValue = {"a":{"b":[{"c":{"d":1,"e":2}}]}}

否则,最好的选择是将任务分为两部分,第一部分是解析数组,第二部分是将其转换为具有修改内容的新数组。

关于json - JsPath.json.update 不适用于路径(IdxPathNode)中的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26290480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com