2011-12-28 26 views
1

我在使用逗號在我的Android項目中的JSON對象內讀取字符串時遇到問題。一個工作JSON字符串是以下:StringTokenizer,JSON和逗號的

{"success": "[TG2301_Stoke Holy Cross, TF7439_Thornham Corner, TL8583_Thetford]"} 

但有時地名有逗號,並拋出一個搖搖晃晃的與我使用的JSON解析成鍵的JSON和StringTokenizer的方法:值對,如下所示最後一個條目:

{"success": "[TG2301_Stoke Holy Cross, TF7439_Thornham Corner, TL8583_Thetford, North]"} 

之前,我發現這個錯誤我用下面的解析JSON:

StringTokenizer str1 = new StringTokenizer(str,"[,]"); 
while (str1.hasMoreTokens()) { 
String val = str1.nextToken().trim(); 
// Split the string at the underscore and do some stuff 
} 

任何人都可以提出如何正確逃生中的PL逗號acename字符串,在Java中創建JSON時還是在StringTokenizer中?謝謝。

+1

這不是一個有效的JSON。 'success'看起來像一串字符串,但字符串應該被引號包圍。 – 2011-12-28 15:04:12

+0

如果我把我的'好的'JSON字符串放到http://jsonlint.com/中,它就會返回有效。 – iaindownie 2011-12-28 15:14:22

+0

僅僅因爲它在語法上是有效的,並不意味着它可以做到你想要的。哦,那麼生活會多麼容易(或者可能不會)。 – gustafc 2011-12-28 15:16:32

回答

4

任何人都可以提出如何正確逃生的地名串中的逗號,既可以在Java創建JSON [...]什麼時候?

你的問題是,你是返回多個值作爲一個字符串 - 你有雙引號括號,而不是內部(封閉的單獨的值)。你可能想美國的字符串,而不是砍東西了自己的JSON列表:

{"success": ["TG2301_Stoke Holy Cross", 
      "TF7439_Thornham Corner", 
      "TL8583_Thetford, North"]} 

這樣,引號內的逗號是不以任何方式神奇,你會得到你的地名作爲很好的字符串。

說了這麼多,你實際上想要做的是返回一個JSON對象(這很像一個Java字典),而不是字符串列表,讓你甚至讓你的鍵/值對分裂很好:

{"success": {"TG2301": "Stoke Holy Cross", 
      "TF7439": "Thornham Corner", 
      "TL8583": "Thetford, North"}} 
+0

好吧,我確定我可以創建這個,但是你會使用什麼StringTokenizer'令牌'來解析這個?逗號肯定會有相同的問題? – iaindownie 2011-12-28 15:16:41

+0

忘記最後的評論 - 我可以看到你建議使用JSON對象而不是單個字符串。謝謝。 – iaindownie 2011-12-28 15:20:45

+0

關於在括號內放置雙引號的方法 - 如果字符串本身的一部分包含雙引號? – BornToCode 2014-11-03 09:29:05