Java Can';t将JSONObject添加到数组中
我正在使用解析JSON文件。当我这样做时,我得到一个Java Can';t将JSONObject添加到数组中,java,json,parsing,arraylist,Java,Json,Parsing,Arraylist,我正在使用解析JSON文件。当我这样做时,我得到一个JSONArray。但是当我尝试遍历它并获取它的JSONObject元素时,我得到了一个错误 这是我的代码: JSONArray jsonData = (JSONArray) jsonParser.parse(reader); List<JSONObject> elementsList = new ArrayList<JSONObject>(); for (int i = 1; i < jsonData.siz
JSONArray
。但是当我尝试遍历它并获取它的JSONObject
元素时,我得到了一个错误
这是我的代码:
JSONArray jsonData = (JSONArray) jsonParser.parse(reader);
List<JSONObject> elementsList = new ArrayList<JSONObject>();
for (int i = 1; i < jsonData.size(); i++) {
elementsList.addAll(jsonData.get(i)); // Here jsonData.get(i) is a JSONObject
}
JSONArray jsonData=(JSONArray)jsonParser.parse(reader);
List elementsList=新的ArrayList();
对于(int i=1;i
我在Eclipse中遇到以下错误:
- 类型列表中的方法addAll(Collection)不适用于参数 (对象)
- 类型安全:未选中从对象到集合的强制转换
不知道这些是什么意思以及如何修复。正如您所写的,json Data.get(i)是一个JSONObject,因此,不能使用addAll添加它是正常的。 基本上,如果要添加列表,请使用
addAll
;如果要添加对象,请使用add
您可以使用add
将代码更改为使用for循环迭代jsonData。
另一方面,您可以简单地使用elementsList.addAll(jsonData)
JSONArray#get(int)
的返回类型为Object
(因为它是从原始类型ArrayList
继承的)List#addAll(Collection)
需要类型为Collection
的参数。没有类型转换,类型对象
不能转换为集合
但是,即使您要强制转换由get
返回的值,底层值实际上将是JSONObject
,并且在运行时会得到ClassCastException
你想要的是
elementsList.addAll(jsonData); // outside the loop
因为JSONArray
是ArrayList
的子类型,它是集合
。您将收到一条关于要求未经检查的转换的jsonData
的警告,但如果您的JSONArray
中确实有JSONObject
值,则最好这样做
for (int i = 1; i < jsonData.size(); i++) {
elementsList.add(jsonData.getJSONObject(i));
}
for(int i=1;i
问题是,ArrayList.addAll()只接受java.util.Collection类型,不能将JSONObject作为输入参数
这是javadoc的摘录
按照指定集合的迭代器返回的顺序,将指定集合中的所有元素追加到此列表的末尾。如果在操作进行过程中修改了指定的集合,则此操作的行为未定义。(这意味着,如果指定的集合是此列表,并且此列表为非空,则此调用的行为是未定义的。)
为了将所有JSONObject放入列表,请使用下面提到的add方法,而不是addAll()
JSONArray jsonData = (JSONArray) jsonParser.parse(reader);
List<JSONObject> elementsList = new ArrayList<JSONObject>();
for (int i = 1; i < jsonData.size(); i++) {
elementsList.add(jsonData.get(i)); // Here jsonData.get(i) is a JSONObject
}
JSONArray jsonData=(JSONArray)jsonParser.parse(reader);
List elementsList=新的ArrayList();
对于(int i=1;i
JSONArray#get(int)的返回类型是什么?@SotiriosDelimanolis我编辑了我的问题。实际上它是addAll
。@SotiriosDelimanolisjsonData.get(i)
是JSONObject
jsonData
没有getJSONObject
方法谢谢你的回答和解释!我也试着使用add
,但也没用。这种情况下的编译器错误是类型列表中的add(JSONObject)方法不适用于参数(Object)
Ah我明白了。。如果您非常确定JSONArray中的所有元素都将是JSONObject,那么使用jsonData.getJSONObject(索引)方法代替jsonData.get(索引)