在Scala中解析和操纵json
我有一个从我正在使用的REST服务返回的
JSON.
{ "id": "6804","signatories": [ { "id": "12125","fields": [ { "type": "standard","name": "fstname","value": "John" },{ "type": "standard","name": "sndname","value": "Doe" },"name": "email","value": "john.doe@somwhere.com" },"name": "sigco","value": "Company" } ] } ] } 目前我正在研究一种用json4s解析它的方法,迭代“fields”数组,以便能够改变那里不同对象的属性“value”.到目前为止,我已经尝试了一些json库,最终得到了json4s. Json4s允许我将json解析为JObject,我可以尝试提取“fields”数组 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解析为可迭代对象 我不知道这是否是最好的方法,我真的很感激输入,也许有一种更简单的方法来做到这一点. 提前致谢, Stefan Konno 解决方法
您可以将json转换为case类的数组,这是最简单的事情.例如:你可以为Fields提供案例类
case class Field(`type`: String,name: String,value: String) 你可以将你的json转换为像[read [Array]](json)json那样的字段数组 [ { "type": "standard","value": "John" },... ] 这将为您提供一系列字段.同样,您可以为整个Json建模. 现在你有一个case类数组,迭代对象并使用case类copy方法更改值非常简单. 之后,要将对象数组转换为Json,您可以简单地使用write(对象)(在org.json4s.native.Serialization包中可以使用Json4的读写函数. Update 要在不将其转换为case类的情况下执行此操作,可以使用transformField函数 parse(json).transformField{case JField(x,v) if x == "value" && v == JString("Company")=> JField("value1",JString("Company1"))} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |