如何将 List<class> 放入 JSONObject 然后读取该对象?
Posted
技术标签:
【中文标题】如何将 List<class> 放入 JSONObject 然后读取该对象?【英文标题】:How to put a List<class> into a JSONObject and then read that object? 【发布时间】:2011-10-29 06:41:06 【问题描述】:我有一个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。任何帮助将不胜感激。
【问题讨论】:
您使用的是哪个JSONObject
类?有几个……
好点,我以为是 org.json 类。
【参考方案1】:
请致电 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"));
【讨论】:
不要为我工作。我无法从 jsonObject 解析数组。 JSONArray jArray = obj.getJSONArray("list");会给我一个例外。 JSONArray list = new JSONArray(iconIds); obj.put("列表", 列表);这行得通。我可以从 obj JSONArray jArray = obj.getJSONArray("list"); 解析数组【参考方案2】:让我们假设类是 Data,有两个对象 name 和 dob 都是 strings。
首先,检查列表是否为空。然后,将列表中的对象添加到 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();
【讨论】:
【参考方案3】:您可以使用像 flexjson 这样的 JSON 序列化器/反序列化器来为您进行转换。
【讨论】:
感谢您的建议,但如果可以的话,我想不惜一切代价避免使用序列化程序。 好的,既然你想坚持使用 JSONArray 和 JSONObject,我提供了一个替代答案。【参考方案4】:这就是我使用 Google Gson 的方式。我不确定是否有更简单的方法可以做到这一点。(有或没有外部库)。
Type collectionType = new TypeToken<List<Class>>()
// end new
.getType();
String gsonString =
new Gson().toJson(objList, collectionType);
【讨论】:
【参考方案5】:只是为了更新这个线程,这里是如何将一个列表(作为一个 json 数组)添加到 JSONObject 中。 请用您的班级名称替换 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);
【讨论】:
以上是关于如何将 List<class> 放入 JSONObject 然后读取该对象?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 如何将 List<Uint8List> 放入共享首选项中?
创建缓存时如何将所有缓存名称及其数据放入 List<> 中?
java spring 获取配置文件,并放入一个list 对象中
如何从 Map<String, List<String>> 获取数组值并放入 setOnMarkerClickListener?