2016-07-11 37 views
0
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}]}") 

我想在不使用正则表达式的情况下从此json中删除键“smallDescription”及其值。对此有何帮助?从scala中删除json对象的键值

回答

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/

+0

感谢您指出错字,现在更改了它。将回到这一点。 – Akan

+0

实际上,“smallDescription”不是顶级属性,它的属性“fields”里面是一个具有地图列表的值。这意味着我必须删除整个'{“name”:“smallDescription”,“type”:[“null”,{“type”:“string”,“avro.java.string”:“String”}],“默认“:null}'地图块。 – Akan

+0

我相应地更新了答案。 – devkat