web-dev-qa-db-ja.com

JsonArrayをJsonObjectに追加

今日、私はこのテーマについて多くのことをグーグルで検索しました。しかし、私はそれを見つけることができません、どのようにJSONObjectにJSONArrayを追加できますか?

これを行うたびに、このエラーが発生するため:Stackoverflow

        JSONObject fillBadkamerFormaatFromContentlet(Structure structure, String formaat) {
    JSONObject jsonObject = new JSONObject();
    JSONArray arr = new JSONArray();

    BadkamerFormaat badkamerFormaat = new BadkamerFormaat();
    BadkamerTegel badkamerTegel;
    List<Contentlet> contentlets = getContentletsByStructure(structure);
    badkamerFormaat.formaat = formaat;
    badkamerFormaat.tegels = new ArrayList<BadkamerTegel>();

    try {
        jsonObject.put("formaat", formaat); 
    } catch (JSONException e1) {
        throw new RuntimeException(e1);
    }

    for(Contentlet contentlet : contentlets) {
        badkamerTegel = new BadkamerTegel();
        badkamerTegel.naam = contentlet.getStringProperty(ParameterNames.toolBetegelVeldNaam);
        try {
            badkamerTegel.afbeeldingTegel = contentlet.getBinary(ParameterNames.toolBetegelVeldTegelAfbeelding).getPath();
            badkamerTegel.afbeeldingBadkamer = contentlet.getBinary(ParameterNames.toolBetegelVeldBadkamerAfbeelding).getCanonicalPath();
            arr.put(badkamerTegel.toJSON());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }   
    }

    try {
        jsonObject.put("aoColumnDefs",arr);
    } catch (JSONException e) {
        throw new RuntimeException(e);
    }

    return jsonObject;          
}

私はこのエラーを受け取ります:

Java.lang.StackOverflowError
at com.dotmarketing.util.json.JSONArray.<init>(JSONArray.Java:248)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)
at com.dotmarketing.util.json.JSONObject.put(JSONObject.Java:953)

私が欲しいJSON:最後のJsonArrayだけが間違っている:

{
           "wand": [
        {
            formaat: 'vierkant15x15'
            tegels: [
                    {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ,{naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ]
        }
        ,

        {
            formaat: 'vierkant17x15'
            tegels: [
                    {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ,{naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ]
        }
    ]

、「vloer」:[{形式: 'vierkant10x15' tegels:[{naam: ''、imgThumb: '/bla/bla.png'、largeImg: '/bla/bla2.png'}、{naam: ''、 imgThumb: '/bla/bla.png'、largeImg: '/bla/bla2.png'}]}、

        {
            formaat: 'vierkant45x15'
            tegels: [
                    {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ,{naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
                    ]
        }
    ]

}

26

使用している [〜#〜] api [〜#〜] の問題(別名バグ)だと思います。 JSONArrayCollectionを実装します(このAPIの派生元であるjson.org実装はnotにJSONArray実装コレクションがあります) 。 JSONObjectには、コレクションを取得してJSONArrayにラップするオーバーロードされたput()メソッドがあります(したがって、問題が発生します)。他のJSONObject.put()メソッドを強制的に使用する必要があると思います:

_    jsonObject.put("aoColumnDefs",(Object)arr);
_

ベンダーにバグを報告する必要があります。JSONObject.put(String,Collection)メソッドが壊れていることを確認してください。

35
jtahlborn

ここに簡単なコードがあります

List <String> list = new ArrayList <String>();
list.add("a");
list.add("b");
JSONArray array = new JSONArray();
for (int i = 0; i < list.size(); i++) {
        array.put(list.get(i));
}
JSONObject obj = new JSONObject();
try {
    obj.put("result", array);
} catch (JSONException e) {
 // TODO Auto-generated catch block
e.printStackTrace();
}
pw.write(obj.toString());
23
Ravi

あなたのリスト:

List<MyCustomObject> myCustomObjectList;

JSONArray:

// Don't need to loop through it. JSONArray constructor do it for you.
new JSONArray(myCustomObjectList)

あなたの応答:

return new JSONObject().put("yourCustomKey", new JSONArray(myCustomObjectList));

Post/put http bodyリクエストは次のようになります。

    {
        "yourCustomKey: [
           {
               "myCustomObjectProperty": 1
           },
           {
               "myCustomObjectProperty": 2
           }
        ]
    }
3
Vinicius Lima

Android開発に非常に新しいので、私はこれについて自分で学び始めており、このビデオは非常に役立ちました。

https://www.youtube.com/watch?v=qcotbMLjlA4

ビデオの19:30にJSONArrayをJSONObjectに取得することを具体的に説明します。

JSONArrayのビデオからJSONObjectへのコード:

JSONArray queryArray = quoteJSONObject.names();

ArrayList<String> list = new ArrayList<String>();

for(int i = 0; i < queryArray.length(); i++){
    list.add(queryArray.getString(i));
}

for(String item : list){
    Log.v("JSON ARRAY ITEMS ", item);
}
1
Mark Keen

Json Simpleライブラリを使用して簡単に実行できます。ここにグラドルがあります

compile 'com.googlecode.json-simple:json-simple:1.1'

サンプルコードは次のとおりです。

org.json.simple.JSONObject jsonObject=new org.json.simple.JSONObject();
jsonObject.put("Object","String Object");

ArrayList<String> list = new ArrayList<String>();
            list.add("john");
            list.add("mat");
            list.add("jason");
            list.add("matthew");

            jsonObject.put("List",list);

それでおしまい。 :)

0