J'ai beaucoup googlé aujourd'hui pour ce sujet. Mais je ne le trouve pas. Comment puis-je ajouter un JSONArray à un JSONObject?
Parce que chaque fois que je fais cela, j'obtiens cette erreur: 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;
}
Je reçois cette erreur:
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)
Le JSON que je veux: Seul le dernier JsonArray va mal:
{
"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": [ { formaat: 'vierkant10x15' tegels: [ {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'Buch , {naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'Buch ] } ,
{
formaat: 'vierkant45x15'
tegels: [
{naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
,{naam: '', imgThumb: '/bla/bla.png', largeImg: '/bla/bla2.png'}
]
}
]
}
Je pense que c'est un problème (aka bug) avec le API vous utilisez. JSONArray
implémente Collection
(l'implémentation json.org à partir de laquelle cette API est dérivée n'a pas JSONArray implémente Collection). Et JSONObject
a une méthode put()
surchargée qui prend une collection et l'encapsule dans une JSONArray
(ce qui cause le problème). Je pense que vous devez forcer l’utilisation de l’autre méthode JSONObject.put()
:
jsonObject.put("aoColumnDefs",(Object)arr);
Vous devriez signaler un bogue au vendeur, à peu près sûr que leur méthode JSONObject.put(String,Collection)
est cassée.
voici un code simple
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());
Votre liste:
List<MyCustomObject> myCustomObjectList;
Votre JSONArray:
// Don't need to loop through it. JSONArray constructor do it for you.
new JSONArray(myCustomObjectList)
Votre réponse:
return new JSONObject().put("yourCustomKey", new JSONArray(myCustomObjectList));
Votre requête http/put corps serait comme ceci:
{
"yourCustomKey: [
{
"myCustomObjectProperty": 1
},
{
"myCustomObjectProperty": 2
}
]
}
Je commence à apprendre moi-même, étant très nouveau dans le développement Android, et j'ai trouvé cette vidéo très utile.
https://www.youtube.com/watch?v=qcotbMLjlA4
Il couvre spécifiquement pour obtenir JSONArray à JSONObject à 19h30 dans la vidéo.
Code de la vidéo pour 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);
}
Vous pouvez simplement le faire en utilisant la bibliothèque Json Simple . Voici le titre
compile 'com.googlecode.json-simple:json-simple:1.1'
Voici un exemple de code:
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);
C'est tout. :)