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

regexを使用せずに、この "json"のキーとその値を削除します。これに関する助言?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")) 

私はhttp://json4s.org/http://argonaut.io/のような、しかしJSONライブラリを使用することをお勧めします。

+0

タイプミスを指摘してくれてありがとう、今すぐ変更しました。これに戻ります。 – Akan

+0

実際には、「smallDescription」はトップレベルのプロパティではなく、プロパティの「フィールド」内にマップのリストを持つ値として格納されます。つまり、 "{" name ":" small "、" type ":[" null "、{" type ":" string "、" avro.java.string ":" String "}]デフォルト ":null}'マップチャンク。 – Akan

+0

私はそれに応じて答えを更新しました。 – devkat

関連する問題