Java中的JSON解析错误:位置上的意外字符 -

时间:2018-01-31 21:28:40

标签: java json parsing

我正在编写一个Java程序,它遍历当前目录中的所有JSON文件并通过它们进行解析,但是我遇到了解析部分的问题。我在JSONObject xUnexpected character (�) at position 0.

上收到错误消息

但是,当我用文件目录的字符串手动替换files[i]时,我没有收到错误。我使用files[i]时只会出错,但我不明白为什么因为files[i]是文件目录的字符串

File path = new File(filePath);
File[] files = path.listFiles();

for (int i = 0; i < files.length; i++) {
    if (files[i].isFile()) {
        //the following line is giving me the error!
        JSONObject x = (JSONObject) parser.parse(new InputStreamReader(new FileInputStream(files[i])));
        org.json.simple.JSONArray contexts = (org.json.simple.JSONArray) x.get("contexts");
        for (int y = 0; y < contexts.size(); y++) {
            Object name = contexts.get(y);
            System.out.println(name);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

想出来!实际上问题是目录中的文件不是JSON ,所以在尝试解析时会出错。现在我删除了非JSON文件

没有更多错误

答案 1 :(得分:0)

如果您说错误必须在文件名中(参考:您对文件[i]的评论和表示文件夹中文件路径的字符串)

  

但是当我用a的字符串手动替换文件[i]时   文件目录,我没有收到错误。我使用时只会出错   文件[I]

,那么你必须知道新的FileInputStream(<...>)有很多重载。这些在底层代码中不是相同的路径。当您将字符串传递给FileInputStream时,它会创建一个File对象并继续执行代码。因此,您可以尝试比较这些2并查看它们是否相等,如果不相等,请找出系统上当前区域设置的编码。例如,比较new File(<string_that_works>)files[i]对应于待测字符串的i