Java Can';t将JSONObject添加到数组中

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

我正在使用解析JSON文件。当我这样做时,我得到一个
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
。@SotiriosDelimanolis
jsonData.get(i)
JSONObject
jsonData
没有
getJSONObject
方法谢谢你的回答和解释!我也试着使用
add
,但也没用。这种情况下的编译器错误是
类型列表中的add(JSONObject)方法不适用于参数(Object)
Ah我明白了。。如果您非常确定JSONArray中的所有元素都将是JSONObject,那么使用jsonData.getJSONObject(索引)方法代替jsonData.get(索引)