将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'} ] } ] 

,“vloer”:[{formaat:'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'} ] } ] 

}

我认为这是你正在使用的API的一个问题(又名。错误)。 JSONArray实现Collection (派生此API的json.org实现没有 JSONArray实现集合)。 JSONObject有一个重载的put()方法,它接受一个Collection并将其包装在一个JSONArray (从而导致问题)。 我认为你需要强制使用其他的JSONObject.put()方法:

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

你应该向供应商提交一个bug,确保他们的JSONObject.put(String,Collection)方法被破坏了。

这里是简单的代码

 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()); 

您的列表:

 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/把HTTP身体请求将是这样的:

  { "yourCustomKey: [ { "myCustomObjectProperty": 1 }, { "myCustomObjectProperty": 2 } ] } 

我开始自己学习这个,对于android开发来说很新,我发现这个video非常有帮助。

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

它具体涵盖了在19:30在video中获取JSONArray到JSONObject。

从JSONArray的video代码到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); } 

你可以简单地使用Json简单的库。 这是gradle

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); 

而已。 🙂