gpt4 book ai didi

json - 在 Scala 中解析和操作 json

转载 作者:行者123 更新时间:2023-12-04 14:57:49 24 4
gpt4 key购买 nike

我有一个从我正在使用的 REST 服务返回的 JSON。

{
"id": "6804",
"signatories": [
{
"id": "12125",
"fields": [
{
"type": "standard",
"name": "fstname",
"value": "John"
},
{
"type": "standard",
"name": "sndname",
"value": "Doe"
},
{
"type": "standard",
"name": "email",
"value": "john.doe@somwhere.com"
},
{
"type": "standard",
"name": "sigco",
"value": "Company"
}
]
}
]
}

目前我正在研究一种用 json4s 解析它的方法,迭代“字段”数组,以便能够更改其中不同对象的属性“值”。到目前为止,我已经尝试了一些 json 库,最终得到了 json4s .

Json4s 允许我将 json 解析为 JObject,我可以尝试提取“字段”数组
从。
    import org.json4s._
import org.json4s.native.JsonMethods._

// parse to JObject
val data = parse(json)

// extract the fields into a map
val fields = data \ "signatories" \ "fields"

// parse back to JSON
println(compact(render(fields)))

我设法提取了这样的 Map,并再次将其呈现回 JSON。但我无法弄清楚的是,如何遍历这些字段并更改其中的属性“值”?

我已经阅读了 json4s 文档,但我对 Scala 和它的语法都很陌生,所以我遇到了困难。

问题变成了,如何迭代解析的 JSON 结果,以更改属性“值”?

这是我想要实现的流程。
  • 将 JSON 解析为可迭代对象
  • 循环并查找某些“名称”并将它们的值(例如 fstname)从 John 更改为其他名称。
  • 将其解析回 JSON,这样我就可以将带有更新值的新 JSON 发送回去。

  • 我不知道这是否是最好的方法,我真的很感激输入,也许有更简单的方法来做到这一点。

    提前致谢,
    此致,

    斯特凡近野

    最佳答案

    您可以将 json 转换为 case 类的数组,这是最简单的事情。例如:您可以为 Fields 设置 case 类,例如

    case class Field(`type`: String, name: String, value: String)

    您可以将您的 json 转换为字段数组,例如 read[Array[Field]](json) json在哪里
     [
    {
    "type": "standard",
    "name": "fstname",
    "value": "John"
    },
    ...
    ]

    这将为您提供一系列字段。同样,您可以为整个 Json 建模。

    现在你有一个案例类数组,使用案例类迭代对象并更改值非常简单 copy方法。

    之后,要将对象数组转换为 Json,您只需使用 write(objects) (Json4s 的读写功能在 org.json4s.native.Serialization 包中可用。
    Update 

    要做到这一点而不将其转换为案例类,您可以使用 transformField 函数
    parse(json).transformField{case JField(x, v) if x == "value" && v == JString("Company")=> JField("value1",JString("Company1"))}

    关于json - 在 Scala 中解析和操作 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27923549/

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