将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);
而已。 🙂