2016-07-11 3 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}]}") 

Ich möchte den Schlüssel "smallDescription" und seine Werte aus diesem Json ohne Verwendung von Regex entfernen. Irgendwelche Hilfe dazu? obwohlEntfernen Sie einen Schlüssel, Wert aus einem JSON-Objekt von Scala

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

Ich würde empfehlen, eine JSON-Bibliothek zu verwenden, wie http://json4s.org/ oder http://argonaut.io/:

Antwort

0

Dies sollte funktionieren (verschachtelte Array/Objektstrukturen anzupassen aktualisiert).

+0

Danke für das Hinweis auf den Tippfehler, änderte es jetzt. Ich werde darauf zurückkommen. – Akan

+0

Eigentlich ist "smallDescription" keine Top-Level-Eigenschaft, sondern innerhalb der Eigenschaft "fields" als Wert, der die Liste der Map enthält. Also ich muss den ganzen '{" Namen "löschen:" smallDescription "," type ": [" null ", {" type ":" string "," avro.java.string ":" String "}]," default ": null}' map chunk. – Akan

+0

Ich habe die Antwort entsprechend aktualisiert. – devkat

Verwandte Themen