2012-05-19 2 views
4

Я хочу, чтобы разобрать вывод JSON в результате следующий адреса в рамках SBJSON для прошивки http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=jsonКак разобрать JSON без кавычек со своей строкой KEY?

while(1);{title:"school - Google Maps",url:"/maps?q=school\x26mrt=yp\x26sll=13.006389,80.2575\x26ie=UTF8\x26hq=school\x26hnear=",urlViewport:false,ei:"RCu3T4eeMqSiiAe7k-yZDQ",form:{selected:"q",q:{q:"school",mrt:"yp",what:"school",near:""},d:{saddr:"",daddr:"",dfaddr:""},geocode:""}, 

Я использую http://www.bodurov.com/JsonFormatter/ прочитать его в Интернете.

В методе ответа ASIHttpRequest я удалил while (1); от ответа

NSString *responseString = [[request resonseString]substringFromIndex:9]; //to remove while(1) 
SBJSONParser * parser = [[SBJSONParser alloc]init]; 
NSDictionary *jsonDict = (NSDictionary*)[parser objectFromString:responseString]; 
NSLog(@"%@",jsonDict) // prints null 
// [responseString JSONValue] also reports error 

Я думаю JSON ключ без двойных кавычек вызывает проблемы.

Вместо { "название": "больница - Google Maps", "urlViewport": ложь, }, мы получаем { название: "больница - Google Maps", "urlViewport" : false }

Пожалуйста, помогите мне разобрать эту сложную структуру JSON, возвращенную из Google.

+0

В чем проблема? –

+0

Я хочу проанализировать представление JSON, в котором нет двойных кавычек. –

+0

Ничего себе, это сломано! ** СЛОМЛЕННОЕ ** !! Ответ начинается с 'while (1);', это недействительно JSON прямо там. Я не ожидаю, что любой анализатор JSON сможет справиться с этим. См. [Спецификация JSON] (http://www.json.org/) о том, как форматировать JSON. –

ответ

0

Вам нужно добавить недостающие кавычки к ключам, поэтому попробуйте следующее:

responseString = [responseString stringByReplacingOccurrencesOfString:@"(\\w+)\\s*:" 
           withString:@"\"$1\":" 
           options:NSRegularExpressionSearch 
           range:NSMakeRange(0, [responseString length])]; 

Это должно хорошо работать с данной строкой JSON.

+0

Вышеуказанный JSON - это всего лишь двухстрочный отрывок из [link] (http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=json). Я также пробовал это решение [ссылка] (http://www.dimzzy.com/blog/2011/09/fixing-invalid-json-before-parsing/). Но нет надежды, лучше я могу пойти с выходом kml. Спасибо за ваш интерес. –

+0

Я бы не стал доверять этому, чтобы работать надежно. –

1

Это работало лучше для моего случая, потому что мои значения содержали моменты времени, из-за которых регулярное выражение в приведенном выше ответе соответствовало неправильному.

json = [json stringByReplacingOccurrencesOfString: @"(\\w*[A-Za-z]\\w*)\\s*:" 
             withString: @"\"$1\":" 
              options: NSRegularExpressionSearch 
              range: NSMakeRange(0, json.length)]; 
+1

Я бы не стал доверять замене персонажа, чтобы работать надежно. –

+0

В общем, согласился. Для конкретных случаев, когда вы знаете формат данных (или обрабатываете проверку ошибок по-другому), этот reg ex является гораздо более коротким решением, чем работа с символом по символу, чтобы распознать неверные ключи. – greg

+0

Если бы мне пришлось, для «реальной» среды, я предпочел бы использовать парсер JSON с открытым исходным кодом и изменить его, чтобы справиться с этим. –

 Смежные вопросы

  • Нет связанных вопросов^_^