Scala:从具有定义名称的嵌套对象中的json文件中删除字段 [英] Scala: remove field from json files in the nested object with defined name
问题描述
我是scala的新手.我正在尝试对json文件进行简单的操作.我被困在以下任务:如何在定义名称的对象内难以删除定义名称的字段. 例如,我想从对象名称2中删除dsc1字段
I'm new to scala. I'm trying to make simple manipulations with json files. I'm stucked with the following task: how can I ellegant remove field with defined name within object with defined name. As an example I'd like to delete dsc1 field from the object name2
{
"group": {
"name1":{
"dsc":"some dsc",
"dsc1":"some dsc",
"dsc2":"some dsc"
},
"name2":{
"dsc":"some dsc",
"dsc1":"some dsc",
"dsc2":"some dsc"
}
}
}
为了解析,我使用了liftweb. 我已经创建了以下代码,但是它删除了所有的dsc1:
For parsing I'm using liftweb. I've cteate the following code but it deletes all dsc1:
val transformedJson2 = parsedInput transform {
case JObject(fields) if (fields.head.name == "name2") => JObject(fields) transform {
case JField("dsc1", JArray(xs)) => JNothing
}
推荐答案
我稍微重写了您的转换,当我尝试对您的输入进行尝试时,这似乎奏效了:
I rewrote your transformation a little bit, and this seemed to worked when I tried it against your input:
val transformedJson2 = parsedInput transform {
case JField("name2", fields) =>
fields remove {
case JField("dsc1", _) => true
case _ => false
}
}
除了使用remove
之外,您还可以像在示例中一样使用第二个transform
:
Instead of using remove
, you could also use a second transform
as you did in your example:
val transformedJson2 = parsedInput transform {
case JField("name2", fields) =>
fields transform {
case JField("dsc1", _) => JNothing
}
}
因此,通过使用来自以下位置的解析输入:
So, by using the parsed input from:
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"
}
}
}
这篇关于Scala:从具有定义名称的嵌套对象中的json文件中删除字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!