简单的JSON意外的令牌{在位置> 1

问题描述:

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

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对象的第一个左大括号({)处的意外标记而引发错误(即,在大括号befo重新“ID”:345)。

我该如何解决这个问题? 而且,作为一个后续,在这个例子中,如何为用户名提取信息呢?

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

+1

基本上这是'{} {}'这在JSON中是无效的。 JSON或者需要是文件本身'[{},{}]'中的一个数组,否则您需要一次解析它一行 –

+0

您的JSON无效我的意思是格式错误。 – Enzokie

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

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

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

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

这是错误的... {{},{}}无效JSON – devnull69

+0

阅读我的答案。这*可能是一个有效的JSON,取决于数据模型。 – AlexR

您试图解析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(); 
} 
}