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

标签 json scala lift

我是 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
}

最佳答案

我稍微重写了你的转换,当我根据你的输入尝试它时,这似乎有效:

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"
    }
  }
}

关于json - Scala:从具有定义名称的嵌套对象中的 json 文件中删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216069/

相关文章:

string - 如何在Lift中将JSON JString值转换为普通String?

JSON 注释的可能性

java - JSON 解析器错误(NullPointerException)

scala - 这种提升功能有名字吗?

parsing - 如何在 Scala 解析器组合器中组合正则表达式和关键字

scala - 如何捕获异常并重定向到 Lift 中的错误页面?

json - JSON 的 XSLT 等效项

javascript - 带数据源的 W2UI 网格内联编辑

json - 将Scala对象序列化为Json并索引为Elasticsearch时出现NotXContentException

database - 有没有办法从 Lift 中的数据库模式生成模型代码?