2016-08-15 6 views
0

Javaアプリケーションの一部としてJSONシンプルを使用して、特定のデータを.jsonファイルから取得しようとしています。プログラムを実行するたびに、解析しようとすると予期しないトークンエラーメッセージが表示されます。次のようにシンプルなJSONの予期しないトークン{位置> 1の場合

JSONファイルの簡易版であるこの例では

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); 
を次のように

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

私のコードであります

は、2番目のJSONオブジェクトの最初の左かっこ({)の予期しないトークンのためにエラーをスローします(つまり、中括弧befo re "id":345)。

この問題を解決するにはどうすればよいですか? また、この例では、フォローアップとして、ユーザー名の情報をどのように引き出すのでしょうか?

時間を割いてお読みいただきありがとうございました。

+1

これはJSONでは無効な '{} {}'です。 JSONはファイル['{}、{}]'の配列でなければならないか、一度に1行ずつ解析する必要があります –

+0

JSONが無効です。間違った形式です。 – Enzokie

答えて

3

このファイルは無効なJSONファイルで、各行にオブジェクト全体が含まれています。

あなたが行う必要があるのは、ファイルを1行ずつ読み込んだ後、各行をパーサに渡して新しいオブジェクトを作成することです。

-2

あなたのJSONは間違っています。実際には2つの有効なJSONが含まれています。有効なJSONドキュメントを1つ作成したい場合は、配列またはコレクションの場合、入力を{および}または[ ]にラップする必要があります。 2つの異なるエンティティを区切るコンマに注意してください。

[ 
{"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オブジェクトを解析しようとしていますが、実際には2つのJSONオブジェクトがあります。 あなたのコードでは、実際にはJSONオブジェクトの配列が必要です。あなたは、いくつかのオンラインtoolを使用することができ、すばやくJSONの構文をチェックするために

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

: だから、適切なJSONの配列を使用します。

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(); 
} 
} 
関連する問題