无法将JSONObject添加到数组中

时间:2015-06-04 15:55:56

标签: java json parsing arraylist

我使用JSON simple来解析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
}

我在Eclipse中遇到以下错误:

  • 类型List中的方法addAll(Collection)不适用于参数  (对象)
  • 类型安全:未选中从对象转换为集合

不确定这些是什么意思以及如何解决这个问题。

4 个答案:

答案 0 :(得分:3)

JSONArray#get(int)的返回类型为Object(因为它继承自原始类型ArrayList)。 List#addAll(Collection)期望参数类型为Collection。如果没有类型广告,Object类型无法转换为Collection

但是,即使你要转换get返回的值,基础值实际上也是JSONObject,你在运行时得到ClassCastException

你想要的是

elementsList.addAll(jsonData); //  outside the loop

因为JSONArrayArrayList的子类型,Collection。您会收到有关jsonData要求取消选中转换的警告,但您应该很好,假设您JSONObject内的值实际为JSONArray

答案 1 :(得分:0)

正如您所写,json Data.get(i)是一个JSONObject,因此,您无法使用addAll添加它是正常的。 基本上,如果要添加列表,请使用addAll,如果要添加对象,请使用add

您可以使用add更改代码,使用for循环遍历jsonData。 另一方面,您可以简单地使用elementsList.addAll(jsonData)

答案 2 :(得分:0)

尝试那样。

Public Function checkColor(cell)
If cell.Interior.Color = vbRed Then
    checkColor = 200
Else
    checkColor = 0
End If
End Function

答案 3 :(得分:0)

问题是,ArrayList.addAll()只接受java.util.Collection类型,不能将JSONObject作为输入参数,

以下是javadoc的摘录,

public boolean addAll(Collection c)

将指定集合中的所有元素按指定集合的​​Iterator返回的顺序附加到此列表的末尾。如果在操作正在进行时修改指定的集合,则此操作的行为是不确定的。 (这意味着如果指定的集合是此列表,则此调用的行为是未定义的,并且此列表是非空的。)

为了将所有JSONObjects放入列表中,使用如下所述的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
}