2016-08-15 52 views
0

我試圖使用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

回答

3

該文件是無效的JSON文件,它包含每行上的整個對象。

您需要做的是逐行讀取文件,然後將每行傳遞給解析器以創建一個新對象。

-2

你的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

0

您試圖解析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

0

如果您修復了您的代碼,則可以解決意外的令牌錯誤。

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(); 
} 
} 
相關問題