使用JSON Simple Library读取json文件时出错

时间:2016-03-24 09:36:59

标签: java json

我正在尝试阅读java中的以下JSON文件。

这是我的 JSON 文件

 {
      "names": [
        {
          "no": 1,
          "name": "John"
        },
        {
          "no": 2,
          "name": "Paul"
        }
        ],
      "new_names": [
        {
          "no": 11,
          "name": "John"
        },
        {
          "no": 12,
          "name": "Paul"
        }
        ]
     }

Java代码:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;


public class ReadFile {


    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();

        try {

            Object obj = parser.parse(new FileReader(
                    "D://data.json"));

            JSONObject jsonObject = (JSONObject) obj;


            JSONArray nameList = (JSONArray) jsonObject.get("names");


            System.out.println("\nnames:");
            Iterator<String> iterator = nameList.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我想打印名称数组,但我收到错误

  

java.lang.ClassCastException:org.json.simple.JSONObject不能   在ReadFile.main(ReadFile.java:34)

转换为java.lang.String

3 个答案:

答案 0 :(得分:3)

你的JSonArray nameList里面有JSONObjects,而不是字符串,

您应该将String替换为JSONObject,如异常跟踪

中所述
 Iterator<JSONObject > iterator = nameList.iterator();
            while (iterator.hasNext()) {
                 JSONObject jsonObjct= iterator.next()
                System.out.println(jsonObjct.getInt("no"));
                System.out.println(jsonObjct.getString("name"));
            }

答案 1 :(得分:1)

从JsonObject迭代..

所以你应该改变如下:

 Iterator<String> iterator = nameList.iterator();

以下:

 Iterator<JSONObject> iterator = nameList.iterator();

使用for循环迭代它,Iterator不适用于JSONArray。

答案 2 :(得分:0)

正是这条线造成了问题:

Iterator<String> iterator = nameList.iterator();

请尝试使用以下内容:

arrLength = nameList.Length()
for (int i = 0; i < arrLength; ++i) {
    JSONObject jsonObj = nameList.getJSONObject(i);
    System.out.println(jsonObj)
}