如何将List <class>放入JSONObject然后读取该对象?</class>

时间:2011-08-17 20:43:35

标签: java json class list

我有一个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。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:17)

致电getJSONObject()而非getString()。这将为您提供数组中JSON对象的句柄,然后您可以从该对象获取该属性。

例如,要从List<SomeClass>获取属性“值”,其中SomeClassString 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);