iOS:到 NSArray 的 JSON 字符串未按预期工作
Posted
技术标签:
【中文标题】iOS:到 NSArray 的 JSON 字符串未按预期工作【英文标题】:iOS : JSON String to NSArray not working as expected 【发布时间】:2011-10-21 00:16:19 【问题描述】:如何在 ios 应用中解析 JSON 字符串?使用 SBJSON。运行下面的代码。获取数据成功,但即使 JSON 字符串包含条目,数组中条目数的计数也为零。我的问题是如何循环查询 JSON 字符串?
谢谢!
// Create new SBJSON parser object
SBJsonParser *parser = [[SBJsonParser alloc] init];
// Prepare URL request to download statuses from Twitter
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://safe2pee.org/api/proxlist.php?location=37.7626214,-122.4351661&distance=1"]];
// Perform request and get JSON back as a NSData object
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSLog(@"string equal = %@", json_string);
// parse the JSON response into an object
// Here we're using NSArray since we're parsing an array of JSON b objects
NSArray *bathrooms = [parser objectWithString:json_string error:nil];
NSLog(@"count = %d", [bathrooms count]);
// Each element in bathrooms is a single bathroom
// represented as a NSDictionary
for (NSDictionary *bathroom in bathrooms)
// You can retrieve individual values using objectForKey on the bathroom NSDictionary
// This will print the tweet and username to the console
NSLog(@"%@ - %@", [bathroom objectForKey:@"name"], [[bathroom objectForKey:@"lat"] objectForKey:@"long"]);
【问题讨论】:
试试[json_string JSONValue]
。
【参考方案1】:
这是因为它不起作用。这不是一个有效的 JSON 字符串。那是 2 个 JSON 字典,背靠背,中间有一个逗号。它缺少包装[]
。如果您实际测试-objectWithString:error:
的结果值,您会看到它为零,如果您将NSError**
传递给那里的error
参数,您会收到一条错误消息,告诉您它是无效的JSON。
【讨论】:
对不起,我应该澄清一下我没有发布整个 json 字符串。我要编辑它。整个字符串相当大。 我的观点仍然存在;您很可能会收到nil
的回复。需要传入一个错误变量,测试-objectWithString:error:
的结果,如果是nil
则打印出错误。
这是返回的错误....2011-10-20 17:35:22.868 JSOHHelp[8887:f803] 错误是 Error Domain=org.brautaset.SBJsonParser.ErrorDomain Code= 0 "输入意外结束" UserInfo=0x68831d0 NSLocalizedDescription=输入意外结束
这是第一个条目... "status":"success", "message":"bathrooms found", "location":"37.762621,-122.435166", "radius": "1", "tally":"43", "bathrooms": [它有一个括号,但最后一个条目没有。
听起来字符串没有正确平衡就终止了,例如它缺少结束 ] 或 或其他内容。【参考方案2】:
我查看了当我在您的帖子中请求 URL 时返回的 JSON 字符串,看起来它被服务器不正确地截断了。返回的 JSON 字符串包含一个字典结构,其中包含一个名为“浴室”的键,其值是一个字典结构数组。这些浴室字典结构中的每一个都包含多个字段,包括“bid”、“name”、“lat”、...、“directions”和“comment”。
当我滚动到收到的 JSON 末尾时,我在“浴室”数组下看到了一个完整的字典结构(“bid”是“MTIyIFMyUA==”,“name”是“Momi Tobi's”。那个字典结构包含它的右大括号,但缺少数组的右“]”和***字典结构的右“”。
您应该查看服务以了解它返回无效 JSON 字符串的原因。一旦你有一个有效的字符串,看起来你应该从一个 NSDictionary 开始并像这样解析它:
NSDictionary *result = [parser objectWithString:json_string error:nil];
NSArray *bathrooms = [result objectForKey:@"bathrooms"];
【讨论】:
以上是关于iOS:到 NSArray 的 JSON 字符串未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有对象数组的 json 字符串转换为带有 nsdictionaries 的 nsarray - IOS