在Scala中更新嵌套的JSON数组可以通过以下步骤实现:
import play.api.libs.json._
import play.api.libs.json.Reads._
import play.api.libs.functional.syntax._
case class Person(name: String, age: Int)
implicit val personReads: Reads[Person] = (
(JsPath \ "name").read[String] and
(JsPath \ "age").read[Int]
)(Person.apply _)
implicit val personWrites: Writes[Person] = (
(JsPath \ "name").write[String] and
(JsPath \ "age").write[Int]
)(unlift(Person.unapply))
val jsonStr = """{
"people": [
{
"name": "Alice",
"age": 25
},
{
"name": "Bob",
"age": 30
}
]
}"""
val json = Json.parse(jsonStr)
val updatedJson = json.transform((__ \ 'people).json.update(
__.read[JsArray].map { case JsArray(arr) =>
JsArray(arr :+ Json.toJson(Person("Charlie", 35)))
}
)).get
在上述代码中,我们使用transform
方法来更新JSON数组。首先,我们使用(__ \ 'people).json.update
来定位到people
字段,并使用read[JsArray]
将其读取为一个JsArray
对象。然后,我们使用map
方法来对JsArray
进行操作,通过:+
操作符将新的Person
对象添加到数组中。最后,我们使用get
方法获取更新后的JSON对象。
val updatedJsonStr = Json.stringify(updatedJson)
println(updatedJsonStr)
这样就完成了在Scala中更新嵌套的JSON数组的操作。请注意,上述代码中使用的是Play框架的JSON库,你可以根据自己的需求选择其他JSON库。
领取专属 10元无门槛券
手把手带您无忧上云