从scala中删除json对象的键值

时间:2016-07-11 06:18:03

标签: json scala

import scala.util.parsing.json._


val jsonObj = JSON.parseFull("{\"type\":\"record\",\"name\":\"ProductWithLatestPrice\",\"namespace\":\"models\",\"fields\":[{\"name\":\"isbn\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null},{\"name\":\"ku\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null},{\"name\":\"pc\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},\"default\":[]},{\"name\":\"mpn\",\"type\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},\"default\":[]},{\"name\":\"smallDescription\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null},{\"name\":\"longDescription\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null},{\"name\":\"specificationText\",\"type\":[\"null\",{\"type\":\"string\",\"avro.java.string\":\"String\"}],\"default\":null}]}")

我想删除密钥" smallDescription"并且它的值来自这个json而不使用正则表达式。对此有何帮助?

1 个答案:

答案 0 :(得分:0)

这应该有效(更新以匹配嵌套数组/对象结构):

def remove(key: String)(x: Any): Any =
  x match {
    case m: Map[String, _] => m.mapValues(remove(key)) - key
    case l: List[_] => l.map(remove(key))
    case v => v
  }

val jsonObj = JSON.parseFull("…").map(remove("smallDescription"))

我建议使用JSON库,例如http://json4s.org/http://argonaut.io/