我有一个List<class>
,我想将其转换为json对象,然后遍历json对象中的数据。
如果这只是list<String>
我可以做类似的事情:
JSONObject obj = new JSONObject();
List<String> sList = new ArrayList<String>();
sList.add("val1");
sList.add("val2");
obj.put("list", sList);
然后我可以遍历列表:
JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.size(); ii++
System.out.println(jArray.getString(ii));
使用该类的问题是我需要访问list<class>
的每个类元素中的数据,我不知道如何对其进行编码/将其遍历为JSON。任何帮助将不胜感激。
答案 0 :(得分:17)
致电getJSONObject()
而非getString()
。这将为您提供数组中JSON对象的句柄,然后您可以从该对象获取该属性。
例如,要从List<SomeClass>
获取属性“值”,其中SomeClass
有String getValue()
和setValue(String value)
:
JSONObject obj = new JSONObject();
List<SomeClass> sList = new ArrayList<SomeClass>();
SomeClass obj1 = new SomeClass();
obj1.setValue("val1");
sList.add(obj1);
SomeClass obj2 = new SomeClass();
obj2.setValue("val2");
sList.add(obj2);
obj.put("list", sList);
JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.length(); ii++)
System.out.println(jArray.getJSONObject(ii).getString("value"));
答案 1 :(得分:3)
我们假设该类是数据,其中两个对象 name 和 dob 都是字符串。
最初,检查列表是否为空。然后,将列表中的对象添加到 JSONArray
JSONArray allDataArray = new JSONArray();
List<Data> sList = new ArrayList<String>();
//if List not empty
if (!(sList.size() ==0)) {
//Loop index size()
for(int index = 0; index < sList.size(); index++) {
JSONObject eachData = new JSONObject();
try {
eachData.put("name", sList.get(index).getName());
eachData.put("dob", sList.get(index).getDob());
} catch (JSONException e) {
e.printStackTrace();
}
allDataArray.put(eachData);
}
} else {
//Do something when sList is empty
}
最后,将 JSONArray 添加到 JSONObject 。
JSONObject root = new JSONObject();
try {
root.put("data", allDataArray);
} catch (JSONException e) {
e.printStackTrace();
}
您还可以将此数据作为字符串进一步获取。
String jsonString = root.toString();
答案 2 :(得分:1)
您可以使用flexjson之类的JSON序列化程序/反序列化程序为您进行转换。
答案 3 :(得分:1)
这就是我使用Google Gson的方式。我不确定,如果有更简单的方法可以做到这一点。(有或没有外部库)。
Type collectionType = new TypeToken<List<Class>>() {
} // end new
.getType();
String gsonString =
new Gson().toJson(objList, collectionType);
答案 4 :(得分:0)
只是为了更新这个线程,这里是如何将一个列表(作为json数组)添加到JSONObject中。 Plz用您的类名替换YourClass;
List<YourClass> list = new ArrayList<>();
JSONObject jsonObject = new JSONObject();
org.codehaus.jackson.map.ObjectMapper objectMapper = new
org.codehaus.jackson.map.ObjectMapper();
org.codehaus.jackson.JsonNode listNode = objectMapper.valueToTree(list);
org.json.JSONArray request = new org.json.JSONArray(listNode.toString());
jsonObject.put("list", request);