2016-10-06 61 views
0

我正在使用Eclipse將json轉換爲Java中的字符串。但我不斷收到:java.lang.IllegalStateException錯誤消息

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException 

每次我嘗試運行我的程序時出現錯誤消息。 Eclipse無法識別我的代碼中的任何錯誤/錯誤。我做了一些研究,似乎我的JSON無效(我用JSONLint)。

這是我的JSON:

String json =  
"{" 
       +"'$type': 'Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities'," 
       + "'id' : a1," 
       + "'displayName' : 'A1'," 
       + "'statusSeverity' : 'Good'," 
       + "'statusSeverityDescription' : 'No Exceptional Delays'," 
       + "'bounds' : '[[-0.25616,51.5319],[-0.10234,51.6562]]'," 
       + "'envelope' : '[[-0.25616,51.5319],[-0.25616,51.6562],[-0.10234,51.6562],[-0.10234,51.5319],[-0.25616,51.5319]]'," 
       + "'url' : 'https://api-argon.tfl.gov.uk/Road/a1'" 
       + "}"; 

請誰能告訴我什麼是錯的JSON和我怎樣才能改變它,以便它有效嗎?如果我錯過了我應該包含的任何細節,我對java和json相當陌生。

+3

嘗試使用在線json驗證器,如http://jsonlint.com/ –

+0

[解析Json文件與gson:MalformedJsonException]可能重複(http://stackoverflow.com/questions/10073790/parsing-json-file-with-gson -malformedjsonexception) – Joe

+0

@Joe它在技術上是重複的,但是在不同的語言和不同的錯誤信息之間,可以理解的是它沒有被發現。對於類似的一羣人來說,未來可能會稍微多一些。 – DonyorM

回答

3

您正在使用單引號爲您的JSON標識符。使用雙引號。

"\"$type\": \"Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities\"," + etc. 

錯誤是因爲您的json代碼格式錯誤,這些單引號雖然方便在Java中,但對json無效。

+0

我將這種格式用於我的json,現在它在[link](www.jsonlint.com)上是有效的,這也意味着我的程序能夠正常工作。謝謝! –

+0

@NS不客氣! – DonyorM

0

您可能想要使用如下所示的更改。處理數組時有一個問題。

{ 
'$type': { 
    'Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities' 
}, 
'id': a1, 
'displayName': 'A1', 
'statusSeverity': 'Good', 
'statusSeverityDescription': 'No Exceptional Delays', 
'bounds': '[[-0.25616,51.5319],[-0.10234,51.6562]]', 
'envelope': '[[-0.25616,51.5319],[-0.25616,51.6562],[-0.10234,51.6562],[-0.10234,51.5319],[-0.25616,51.5319]]', 
'url': 'https://api-argon.tfl.gov.uk/Road/a1' 

}

這裏指 - http://www.w3schools.com/js/js_json_intro.asp

+0

括號是引用的,因爲它被格式化爲一個java變量。你也可能想要確保你的文件括號被包含在代碼塊中。 – DonyorM

3

你會oftern碰到使用單引號的問題,而不是雙引號的

{ 
    "$type": "Tfl.Api.Presentation.Entities.RoadCorridor, Tfl.Api.Presentation.Entities", 
    "id": "a1", 
    "displayName": "A1", 
    "statusSeverity": "Good", 
    "statusSeverityDescription": "No Exceptional Delays", 
    "bounds": "[[-0.25616,51.5319],[-0.10234,51.6562]]", 
    "envelope": "[[-0.25616,51.5319],[-0.25616,51.6562],[-0.10234,51.6562],[-0.10234,51.5319],[-0.25616,51.5319]]", 
    "url": "https://api-argon.tfl.gov.uk/Road/a1" 
} 

這裏是你的JSON現在是有效的,僅供參考我發現jsonlint.com在幫助調試無效的json方面很出色