StringTokenizer, JSON и запятые - PullRequest
       6

StringTokenizer, JSON и запятые

1 голос
/ 28 декабря 2011

У меня проблема с чтением в строках с запятыми внутри объекта JSON в моем проекте Android. Рабочая строка JSON ниже:

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

Но иногда топонимы имеют запятые, и это вызывает колебания с методами JSON и StringTokenizer, которые я использую для анализа JSON в парах ключ: значения, как показано ниже в последней записи:

{"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
}

Кто-нибудь может подсказать, как правильно экранировать запятую в строке имени места, либо в Java при создании JSON, либо в StringTokenizer? Благодаря.

1 Ответ

4 голосов
/ 28 декабря 2011

Кто-нибудь может подсказать, как правильно экранировать запятую в строке имени места, либо в 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"}}
...