首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:从具有定义名称的嵌套对象的json文件中删除字段

Scala:从具有定义名称的嵌套对象的json文件中删除字段
EN

Stack Overflow用户
提问于 2013-01-08 21:32:32
回答 2查看 3.4K关注 0票数 2

我是scala的新手。我正在尝试对json文件进行简单的操作。我有以下任务:如何在定义名称的对象中删除定义名称的字段?例如,我想从对象name2中删除dsc1字段

代码语言:javascript
复制
{
  "group": {
    "name1":{
      "dsc":"some dsc",
      "dsc1":"some dsc",
      "dsc2":"some dsc"
     },
    "name2":{
      "dsc":"some dsc",
      "dsc1":"some dsc",
      "dsc2":"some dsc"
    }
  }
}

对于解析,我使用的是liftweb。我已经编写了以下代码,但它删除了所有dsc1:

代码语言:javascript
复制
val transformedJson2 = parsedInput transform { 
    case JObject(fields) if (fields.head.name == "name2") => JObject(fields) transform {
          case JField("dsc1", JArray(xs)) =>  JNothing
}
EN

回答 2

Stack Overflow用户

发布于 2013-01-09 02:22:12

我稍微重写了你的转换,当我对你的输入进行尝试时,这似乎起到了作用:

代码语言:javascript
复制
val transformedJson2 = parsedInput transform { 
  case JField("name2", fields) => 
    fields remove {
      case JField("dsc1", _) =>  true
      case _ => false   
    }
}

您还可以像在示例中那样使用第二个transform,而不是使用remove

代码语言:javascript
复制
val transformedJson2 = parsedInput transform { 
  case JField("name2", fields) => 
    fields transform {
      case JField("dsc1", _) =>  JNothing
    }
}

因此,通过使用解析后的输入:

代码语言:javascript
复制
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))))))))))

两者都应该产生输出:

代码语言:javascript
复制
scala> pretty(render(transformedJson2))
res10: String = 
{
  "group":{
    "name1":{
      "dsc":"some dsc",
      "dsc1":"some dsc",
      "dsc2":"some dsc"
    },
    "name2":{
      "dsc":"some dsc",
      "dsc2":"some dsc"
    }
  }
}
票数 4
EN

Stack Overflow用户

发布于 2017-10-11 00:37:14

我试过这个:

代码语言:javascript
复制
 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)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14216069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档