json - 如何在scala中更新嵌套的JSON数组
问题描述
我是 scala/play 的新手,我一直在尝试更新(添加新的 id 到) JSONquery
中的数组,sections[1]
但我没有成功遍历 JSON,因为我对转换器以及如何使用它。
"definitions": [
{
"sections": [
{
"priority": 1,
"content": {
"title": "Driver",
"links": [
{
"url": "https://blabla.com",
"text": "See all"
}
]
},
"SearchQuery": {
"options": {
"aggregate": true,
"size": 20,
},
"query": "{\"id\":{\"include\":[\"0wxZ4Nr2\", \"0wxZbNr2\", \"6WZOPMw1\"}}"
}
},
{
"priority": 2,
"content": {
"title": "Deliver",
"links": [
{
"url": "https://blabla.com",
"text": "See all"
}
]
},
"SearchQuery": {
"options": {
"aggregate": true,
"size": 20,
},
"query": "{\"id\":{\"include\":[\"2W12Q2wq\", \"Nwq09lW3\", \"QweNN2d9\"]}}"
}
}
]
}
关于如何实现这一目标的任何建议。我的目标是将值放入 JSON 数组的特定字段中。我在整个应用程序中使用播放 JSON 库?
解决方案
正如您所注意到的,如果您使用 PlayJSON,您可以使用Json Transformers
更新字段的工作方式如下:
val queryUpdater = (__ \ "definitions" \ 1 \ "SearchQuery" \ "query").json.update(
of[JsString].map {
case JsString(value) =>
val newValue: String = ... // calculate new value
JsString(newValue)
}
)
json.transform(queryUpdater)
如果您需要更新所有查询,则更像是:
val updateQuery = (__ \ "SearchQuery" \ "query").json.update(
of[JsString].map {
case JsString(value) =>
val newValue: String = ... // calculate new value
JsString(newValue)
}
)
val updateQueries = (__ \ "definitions").json.update(
of[JsArray].map {
case JsArray(arr) =>
JsArray(arr.map(_.transform(updateQuery)))
}
)
json.transform(updateQueries)
推荐阅读
- java - What happens if there are multiple beans having the same @Order value
- r - 创建一个可以帮助我区分组更改的变量
- sharepoint-online - 从 JavaScript 应用程序在线生成 SharePoint 点的访问令牌时出现 Cors 错误
- python - Python基于单列添加缺失的行
- flutter - Flutter with tflite 和可教机器查询
- spring-boot - Spring Boot Dashboard 未在 VSCode 中自动激活
- javascript - 确认支付 API 和 JavaScript
- c# - 解决 OAuth 令牌刷新中的竞争条件
- python - 如何网格扩展动态调整窗口大小?
- php - Redux 框架字段类型编辑器未显示在自定义选项上