8

org.json ライブラリを使用して Java で json 文字列を作成しようとしています。以下はコード スニペットです。

JSONArray jSONArray = new JSONArray();
JSONObject jSONObject = new JSONObject();
jSONObject.accumulate("test", jSONArray);
System.out.println(jSONObject.toString());

印刷されると思っていた

{"test":[]} 

印刷中

{"test":[[]]}
4

2 に答える 2

10

accumulateこのように使用する代わりに、put既存の (または作成して追加する) JSONArray に追加するのではなく、次のように JSONObject のキーとして追加します。

JSONArray array = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("test", array);
System.out.println(obj.toString());

これで印刷されます{"test":[]}

于 2013-04-29T05:37:13.947 に答える
3

その理由は、accumulateメソッドで、

Object object = this.opt(key); //gets the key value. Null in your case.
if (object == null) {
    this.put(key,
        value instanceof JSONArray ? new JSONArray().put(value) : value);
}

これは、(メソッドについて)明確に述べているAPIによるものですaccumulate-

キーの下に値を累積します。これは put メソッドと似ていますが、キーの下にオブジェクトが既に格納されている場合は、JSONArray がキーの下に格納され、累積されたすべての値が保持される点が異なります。JSONArray が既に存在する場合は、新しい値がそれに追加されます。対照的に、put メソッドは前の値を置き換えます。JSONArray ではない値が 1 つだけ累積された場合、結果は put を使用した場合と同じになります。ただし、複数の値が累積されると、結果は追加のようになります。

put()他の回答で述べたように、目的の結果を得るために使用できます。

于 2013-04-29T05:52:45.247 に答える