2012-10-01 44 views
1

我使用JSON-Simple從twitter解析JSON塊。我碰到一個excepton:爲什麼JSON-Simple解析器在Java中期望冒號?

Exception in thread "main" Unexpected token COLON(:) at position 27
...stack trace...

我已經看到了這樣類似的東西,由於在JavaScript解析JSON的方式有些特殊性(我認爲這JSONJ-P需要接受她補齊)但這不是這種情況,因爲我不在JS!

這裏是我的JSON(消毒):

{"in_reply_to_status_id_str":null,"id_str":"23475129874512857","text":"RT @SanitizedPersonName: SomeTextIveSanitized @SanatizedTwitterHandle SomeMoreText http:\/\/t.co\/sanitized SomeText (MoreText) \/ Text", "restOfTheJson":"Is not Special"}

兩件事情打我。

  1. 它打印出來,它只是緩衝閱讀器讀取就行了,並不在它的結束塊開始有{。這似乎是一個嚴重的問題。
  2. 我位置27處讀取的字符不是一個冒號,但r

因此,無論緩衝讀者吃了我的{或解析器不能正確解析。我如何知道它是什麼並解決問題?

n.b.我的打印和解析行在while(buff.read()!=-1)(檢查行結束)和if語句中檢查'正則表達式'(if(!line.contains(DELETE_REGEX))(檢查無效的jsons)是否可能是原因?這裏是代碼:

buff = new BufferedReader(new FileReader(JSON_FILE_NAME+".json")); 
while(buff.read() != -1){ 
    line = buff.readLine(); 
    if(!line.contains(DELETE_REGEX)){ 
     System.out.println(line); 
     myJSON=(JSONObject) parser.parse(line); 
     myJSONSample.add(myJSON); 
    } 
} 
return myJSONSample; 

我錯過了一些無關緊要的東西。

+0

消毒版本是否真的重現了問題?我得到了一個不同的錯誤,當我修復它時,我沒有收到任何冒號的投訴。 – Quentin

+0

您的第一個鍵('in_reply_to_status_id_str')中缺少開頭引號。 – lanzz

+0

@Quentin你是否像我一樣使用緩衝閱讀器(或者儘可能接近我給出的內容)?我已經修復了lanzz – Pureferret

回答

2

我想我找到了。 buff.read()正在吃掉每行的第一個char,因此無法將其解析爲json。我會恢復到while((line=buff.readLine())!=null)以檢查EOR,但這不起作用。

相關問題