Java 简单JSON意外标记{at position>;1

Java 简单JSON意外标记{at position>;1,java,json,json-simple,Java,Json,Json Simple,我试图将JSON simple用作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"} pu

我试图将JSON simple用作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();
    }
} 
我的代码如下:

{"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();
    }
} 
由于在第二个JSON对象的第一个左大括号({)处(即在“id”:345之前的大括号处)出现意外标记而引发错误

我如何着手解决这个问题? 接下来,在本例中,如何提取用户名的信息


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

该文件是无效的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对象,实际上有两个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语法,您可以在线使用一些。如果您修复了代码,您可以解决意外的令牌错误

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();
}
} 
publicstaticvoidreadjson(){
JSONParser JSONParser=新的JSONParser();
试一试{
FileReader=新的FileReader(fileLocation);
//你需要修理这个零件
JSONArray JSONArray=(JSONArray)jsonParser.parse(reader);
迭代器i=jsonArray.Iterator();
while(i.hasNext()){
JSONObject obj=(JSONObject)i.next();
int tweetID=(int)obj.get(“id”);
String lang=(String)obj.get(“lang”);
}
}捕获(例外e){
e、 printStackTrace();
}
} 

本质上这是在JSON中无效的
{}{}
。JSON需要是文件本身的数组
[{},{}]
,或者您需要一次解析一行。您的JSON无效,我的意思是格式错误。请阅读我的答案。这可能是一个有效的JSON,具体取决于数据模型。