2011-12-28 78 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