有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法将JSONObject添加到数组中

我正在使用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中遇到以下错误:

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

不知道这意味着什么以及如何解决


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    JSONArray#get(int)的返回类型为Object(因为它是从原始类型ArrayList继承的)List#addAll(Collection)需要类型为Collection的参数。没有类型转换,类型Object不能转换为Collection

    然而,即使要强制转换get返回的值,底层值实际上是JSONObject,并且在运行时会得到ClassCastException

    你想要的是

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

    因为JSONArrayArrayList的一个亚型,它是Collection。您将收到一条关于jsonData需要未经检查的转换的警告,但如果您的JSONArray中确实有JSONObject值,那么您应该会做得很好

  3. # 3 楼答案

    试试看

    for (int i = 1; i < jsonData.size(); i++) {
     elementsList.add(jsonData.getJSONObject(i)); 
    }