巨大なJSON、階層が深かったり値の文字列がとても長かったりする時は、整形したとしても
とても見にくく目視確認に困る。
確認しなくても済むものは、取り除いてしまいたい。
以下、そんなに大きくないJSON でそういう場合の方法、Jacksonライブラリの JsonNode に
対象JSON が読み込めている前提でサンプルを示す。
{ "A" : 123, "B" : { "B01" : "b01-01234", "B02" : { "detail" : "詳細~", "name" : "orange" } }, "C" : [ { "C01" : { "size" : 230 } }, { "C02" : { "size" : 380 } }, { "C03" : { "size" : 670 } } ], "D" : "Document" }
このJSON文字列が読み込んだ結果の JsonNode インスタンスが node だとする。
"D" : "Document" を取り除く場合
ObjectNode に cast して、JsonNode remove(String propertyName) メソッドを実行する。
((ObjectNode)node).remove("D");
node インスタンスから "D" key と valueが削除されてしまうことに注意
深い階層は、JsonNode の path(String) で対象ノードまで連結して JsonNode を求めてから
ObjectNode に cast して remove(String) を実行する。
上の、"B" ⇒ "B02" ⇒ "detail" を削除する場合、
((ObjectNode)(node.path("B").path("B02"))).remove("detail");
配列の1個を削除する場合は、JsonNode から ArrayNode に cast して
remove(int index) メソッドで削除する
((ArrayNode)(node.path("C"))).remove(1);
これら、
((ObjectNode)node).remove("D"); ((ObjectNode)(node.path("B").path("B02"))).remove("detail"); ((ArrayNode)(node.path("C"))).remove(1);
を実行した結果の JsonNode node は、以下になる。
{ "A" : 123, "B" : { "B01" : "b01-01234", "B02" : { "name" : "orange" } }, "C" : [ { "C01" : { "size" : 230 } }, { "C03" : { "size" : 670 } } ] }