java - 无法将 JSONObjects 添加到数组中

标签 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) 方法不适用于参数 (对象)
  • 类型安全:未经检查的从对象到集合的转换

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

最佳答案

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 值。

关于java - 无法将 JSONObjects 添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648600/

相关文章:

java - 无法进行单元测试 - Unitils、Hibernate

json - 缩放 websocket Node 服务器

javascript - 如何从数组中删除 json 元素?

Java Jersey JSON 服务不返回带引号的字符串?

java http GET - 结果解析

C++ - 为什么分词器从文件中读取行这么慢?

java - Servlet JApplet : HttpSession

java - GraphViz 的纯 Java 重新实现?

java - 如何使用自定义 Feign 客户端解码 JSon 响应?

C 读取文件并将数字保存在数组中