4

我想解析来自 iOS SBJSON 框架中以下 url 的 json 输出 http://maps.google.com/maps?q=school&mrt=yp&sll=13.006389,80.2575&output=json

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 键会导致问题。

而不是 { "title": "hospital - Google Maps", "urlViewport": false, },我们得到 { title: "hospital - Google Maps", "urlViewport": false }

请帮我解析从谷歌返回的这个复杂的 JSON 结构。

4

2 回答 2

1

这对我的情况更有效,因为我的值包含导致上述答案中的正则表达式匹配不正确的时间。

json = [json stringByReplacingOccurrencesOfString: @"(\\w*[A-Za-z]\\w*)\\s*:"
                                       withString: @"\"$1\":"
                                          options: NSRegularExpressionSearch
                                            range: NSMakeRange(0, json.length)];
于 2014-09-05T21:47:47.800 回答
0

您需要将缺少的引号添加到键中,因此请尝试以下操作:

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

这应该适用于给定的 JSON 字符串。

于 2012-05-19T11:59:19.920 回答