简单 JSON 意外标记 { 在位置 > 1

Simple JSON unexpected token { at position > 1

我正在尝试使用 JSON 简单作为 Java 应用程序的一部分从 .json 文件中提取特定数据。每当我 运行 程序时,我都会在它尝试解析时收到意外的令牌错误消息。

JSON文件的简化版如下:

{"id":123,"text":"sample1","user":{"id":111,"name":"username"},"lang":"en"}
{"id":345,"text":"sample2","user":{"id":555,"name":"user2"},"lang":"en"}

我的代码如下:

public static void readJSON() {

    JSONParser jsonParser = new JSONParser();
    try {

        FileReader reader = new FileReader(fileLocation);
        JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
        JSONArray jsonArray = (JSONArray) jsonObject.get("");

        Iterator<?> i = jsonArray.iterator();

        while (i.hasNext()) {
            JSONObject obj = (JSONObject) i.next();
            int tweetID = (int) obj.get("id");
            String lang = (String) obj.get("lang");         
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
} 

在这个例子中,代码行:

JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);

由于在第二个 JSON 对象的第一个左大括号 ({) 处(即在 "id":345 之前的大括号处)出现意外标记而引发错误。

我该如何解决这个问题? 而且,作为后续行动,在此示例中如何提取用户名的信息?

感谢您花时间阅读本文,感谢您提供的任何帮助!

该文件是无效的 JSON 文件,它的每一行都包含一个完整的对象。

您需要做的是逐行读取文件,然后将每一行传递给解析器以创建一个新对象。

你的JSON确实是错误的。它实际上包含 2 个有效的 JSON。如果你想创建一个有效的 JSON 文档,你必须用 {} 包装你的输入,如果这是一个数组或集合,则 [ ] 。请注意分隔 2 个不同实体的逗号。

[
{"id":123,"text":"sample1","user":{"id":111,"name":"username"},"lang":"en"},
{"id":345,"text":"sample2","user":{"id":555,"name":"user2"},"lang":"en"}
]

您正在尝试解析 JSON 对象,而您实际上有两个 JSON 对象。 在您的代码中,您实际上需要一个 JSON 对象数组。 所以,使用正确的 JSON 数组:

[
{"id":123,"text":"sample1","user":{"id":111,"name":"username"},"lang":"en"},
{"id":345,"text":"sample2","user":{"id":555,"name":"user2"},"lang":"en"}
]

为了快速检查你的JSON语法,你可以使用一些在线的tool

如果您修复代码,则可以解决意外的令牌错误。

public static void readJSON() {

JSONParser jsonParser = new JSONParser();
try {

    FileReader reader = new FileReader(fileLocation);

    //You need to fix this part
    JSONArray jsonArray = (JSONArray) jsonParser.parse(reader);

    Iterator<?> i = jsonArray.iterator();

    while (i.hasNext()) {
        JSONObject obj = (JSONObject) i.next();
        int tweetID = (int) obj.get("id");
        String lang = (String) obj.get("lang");         
    }
} catch (Exception e) {
    e.printStackTrace();
}
}