我是scala的新手。我正在尝试对json文件进行简单的操作。我有以下任务:如何在定义名称的对象中删除定义名称的字段?例如,我想从对象name2中删除dsc1字段
{
"group": {
"name1":{
"dsc":"some dsc",
"dsc1":"some dsc",
"dsc2":"some dsc"
},
"name2":{
"dsc":"some dsc",
"dsc1":"some dsc",
"dsc2":"some dsc"
}
}
}对于解析,我使用的是liftweb。我已经编写了以下代码,但它删除了所有dsc1:
val transformedJson2 = parsedInput transform {
case JObject(fields) if (fields.head.name == "name2") => JObject(fields) transform {
case JField("dsc1", JArray(xs)) => JNothing
}发布于 2013-01-09 02:22:12
我稍微重写了你的转换,当我对你的输入进行尝试时,这似乎起到了作用:
val transformedJson2 = parsedInput transform {
case JField("name2", fields) =>
fields remove {
case JField("dsc1", _) => true
case _ => false
}
}您还可以像在示例中那样使用第二个transform,而不是使用remove:
val transformedJson2 = parsedInput transform {
case JField("name2", fields) =>
fields transform {
case JField("dsc1", _) => JNothing
}
}因此,通过使用解析后的输入:
scala> val parsedInput = parse(""" {
| "group": {
| "name1":{
| "dsc":"some dsc",
| "dsc1":"some dsc",
| "dsc2":"some dsc"
| },
| "name2":{
| "dsc":"some dsc",
| "dsc1":"some dsc",
| "dsc2":"some dsc"
| }
| }
| } """)
parsedInput: net.liftweb.json.package.JValue = JObject(List(JField(group,JObject(List(JField(name1,JObject(List(JField(dsc,JString(some dsc)), JField(dsc1,JString(some dsc)), JField(dsc2,JString(some dsc))))), JField(name2,JObject(List(JField(dsc,JString(some dsc)), JField(dsc1,JString(some dsc)), JField(dsc2,JString(some dsc))))))))))两者都应该产生输出:
scala> pretty(render(transformedJson2))
res10: String =
{
"group":{
"name1":{
"dsc":"some dsc",
"dsc1":"some dsc",
"dsc2":"some dsc"
},
"name2":{
"dsc":"some dsc",
"dsc2":"some dsc"
}
}
}发布于 2017-10-11 00:37:14
我试过这个:
val transformedJson2 = parsedInput transformField {
case JField("group", fields) => (
"group", fields transformField {
case JField("name2", nameFields) => (
"name2", nameFields removeField {
case JField("dsc1", _) => true
case _ => false
}
)
}
)
}
println(compact(render(transformedJson2)))https://stackoverflow.com/questions/14216069
复制相似问题