1

我想使用java读取一个名为(results.json)的.json文件,并通过键'title'提取数组的值。

这是我的 .json 文件

 [
    {
        "title": {
            "0": "UNIQUE SIGNED HARRY POTTER DELUXE VOLUME SALESMAN DUMMY"
        }
    },
    {
        "title": {
            "0": "Harry Potter and the Philosopher's Stone by JK Rowling - Uncorrected Proof/ARC!!"
        }
    },
    {
        "title": {
            "0": "Huge Lego Lot 532 Lbs Pounds Legos Star Wars Castle Harry Potter City Minifigs"
        }
    }
]

这是我正在使用的java代码

public class JJ {

public static void main(String[] args)
{        
    readJsonFile();
}

public static void readJsonFile() {

    BufferedReader br = null;
    JSONParser parser = new JSONParser();

    try {

        String sCurrentLine;

        br = new BufferedReader(new    FileReader("C:/wamp/www/epsilon/results.json"));

        while ((sCurrentLine = br.readLine()) != null) {
            System.out.println("Names of the Books:\t" + sCurrentLine);

            Object obj;
            try {

                obj = parser.parse(sCurrentLine);
                JSONObject jsonObject = (JSONObject) obj;
                String name = (String) jsonObject.get("title");

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
}

我收到一条错误消息

线程“main”java.lang.ClassCastException 中的异常:org.json.simple.JSONArray 无法转换为 org.json.simple.JSONObject。

4

3 回答 3

3

这很简单。您的 Json 文件在顶层有一个数组。当 JSonParser 解析它时,它会将它作为 JSONArray 返回。您正在尝试将其转换为 JSONObject(类似于地图或字典。)您需要做的是:

Object obj;
try {

    obj = parser.parse(sCurrentLine);
    JSONArray jsonArray = (JSONArray) obj;
    for(obj : jsonArray){//not sure of the exact syntax, I don't have an IDE in front of me.
        JSONObject jsonObject = (JSONObject)obj;
        JSONObject realTitle = (JSONObject)jsonObject.get("0");
        String name = (String) realTitle.get("title");
    }


} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
于 2013-04-21T16:11:59.587 回答
1
        Object obj = parser.parse(new FileReader("/Users/path/to/file/file.txt"));
        JSONArray jsonArray = (JSONArray) obj;
        for (int i = 0; i < jsonArray.size(); i++) {

            JSONObject jsonObjectRow = (JSONObject) jsonArray.get(i);
            String name = (String) jsonObjectRow.get("Name");
            String address = (String) jsonObjectRow.get("Address");
            Long telephone = (Long) jsonObjectRow.get("Phone_Number");

        }
于 2015-12-23T00:28:43.720 回答
-2

我有同样的问题,要解决它只需替换这个:

obj = parser.parse(sCurrentLine);
JSONObject jsonObject = (JSONObject) obj;

经过:

obj = parser.parse(sCurrentLine);
JSONObject jsonObject = new JSONObject((parser.parse(sCurrentLine)).toString());
于 2013-10-02T15:20:11.560 回答