3

私は初心者のJavaプログラマーなので、質問がばかげている場合は申し訳ありません。

次のような JSON オブジェクトがあります。

{
"element1" : {
    "generated_name_1": {
        "a" : {"isReady":false}
    },
    "generated_name_2":{},
    "generated_name_3":{},
    "generated_name_4":{}
},
"element2" : {
    "generated_name_5" : {
        "a" : {"isReady":false},
        "g" : {"isReady":false}
    }
},
"element3" : { 
    "a" : { "isReady":false},
    "n":{}
}
}

「 generated_name_2 」や「 n 」など、空の値が関連付けられているすべての要素を調べて削除したいと思います。これらの要素の名前が何になるかはわかりませんし、JSON ツリーにどの程度ネストされているかもわかりません。

再帰的なプログラムを書かなければならないことがわかりました。これが私が思いついたものです:

public static void cleanJsonNodes(ObjectNode myJsonNode){
    for (JsonNode currentNode : myJsonNode){
        if (currentNode.size() == 0){
            myJsonNode.remove(currentNode);
        } else {
            cleanJsonNodes((ObjectNode)currentNode);
        }
    }
}

もちろん、これは機能しませんが、ここからどこへ行くべきかよくわからず、インターネットを探し回っても役に立ちませんでした。

誰か助けてください!

4

3 に答える 3

2

Jsonでそれを行う方法を示したいだけです:

JSONObject jsonObj = new JSONObject(_message);

    Map<String, JSONObject> map = jsonObj.getMap();

    Iterator<String> it = map.keySet().iterator();

    while(it.hasNext()){
          String key =   it.next();

          JSONObject o = map.get(key);

          if(o.length() == 0){
              it.remove();
          }
    }

JSONObjectロードする{}と長さが 0 になるので、ドロップできます。

補足として、次のような再帰でこのメソッドを使用できます。

JSONObject jsonObj = new JSONObject(_message);

invoke(jsonObj);

...

private static void invoke(JSONObject jsonObj) {
    Map<String, JSONObject> map = jsonObj.getMap();

    Iterator<String> it = map.keySet().iterator();

    while(it.hasNext()){
        String key =   it.next();

        JSONObject o = map.get(key);

        if(o.length() == 0){
            it.remove();
        }
        else{
            invoke(o);
        }
    }
}

検証を追加しませんでしたが、確かに、インスタンスを検証する必要がありますjsonObj.getMap()...

于 2013-10-03T13:02:53.930 に答える
1

これをチェックして

ジャクソンで空のコレクションを送信しない方法

Jsonの空のノードには、使用できます

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/node/ObjectNode.html#remove(java.lang.String)

jackson で JSON 要素を削除する

これらはあなたの問題を解決することができます。

于 2013-10-03T12:55:05.807 に答える