如何解析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"]);
}
答案 0 :(得分:2)
这是因为它不起作用。那不是有效的JSON字符串。这是两个JSON词典,背靠背,两者之间有一个逗号。它缺少包裹[]
。如果您实际测试-objectWithString:error:
的结果值,则会看到它为零,如果您将NSError**
传递给error
参数,则会收到错误消息告诉你它是无效的JSON。
答案 1 :(得分:0)
我查看了在帖子中请求URL时返回的JSON字符串,看起来它被服务器不正确地截断了。返回的JSON字符串包含一个字典结构,其中包含一个名为“bathroom”的键,其值为字典结构数组。每个浴室字典结构都包含几个字段,包括“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"];