it-roy-ru.com

Добавить JsonArray в JsonObject

Я сегодня много гуглил на эту тему. Но я не могу его найти. Как я могу добавить JSONArray в JSONObject?

Потому что каждый раз, когда я делаю это, я получаю эту ошибку: 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'}
                    ]
        }
    ]

, "Влоер": [ { формат: 'vierkant10x15' Тегельс: [ {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png' coming , {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png' coming ] } ,

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

}

26
Danny Gloudemans

Я думаю, что это проблема (иначе ошибка) с API вы используете. JSONArray реализует Collection (реализация json.org, из которой получен этот API, not не имеет JSONArray, реализует Collection). И JSONObject имеет перегруженный метод put(), который принимает коллекцию и оборачивает ее в JSONArray (таким образом, вызывая проблему). Я думаю, что вам нужно принудительно использовать другой метод 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));

Ваш пост/запрос HTTP body будет выглядеть так:

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

Я начинаю узнавать об этом сам, будучи новичком в разработке для Android, и я нашел это видео очень полезным.

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

В частности, речь идет о том, чтобы получить JSONArray для JSONObject в 19:30 в видео.

Код из видео для 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
Md. Sajedul Karim