如何在ios7中解析这个json数据
Posted
技术标签:
【中文标题】如何在ios7中解析这个json数据【英文标题】:how to parse this json data in ios7 【发布时间】:2015-01-11 15:45:37 【问题描述】:代码:
NSURL * url=[NSURL URLWithString:@"alamghareeb.com/mobileData.ashx?catid=0&No=10"];
NSData * data=[NSData dataWithContentsOfURL:url];
NSError * error;
NSMutableDictionary * json = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: &error];
NSMutableArray * referanceArray=[[NSMutableArray alloc]init];
NSMutableArray * periodArray=[[NSMutableArray alloc]init];
NSArray * responseArr = [NSArray arrayWithArray:json[@"item"]];
for (NSDictionary * dict in responseArr)
[referanceArray addObject:[dict objectForKey:@"created"]];
JSON 看起来像:
"item" = [
"id" : "2292",
"created" : "10/01/2015 10:21:18 ص",
"title" : "الإمارات: ملابس رياضية فاخرة لتحسين أداء الإبل في السباقات ",
"image_url" : "http://alamghareeb.com/Photos/L63556482078696289044.jpg",
"image_caption" : ""
,
"id" : "2291",
"created" : "10/01/2015 09:28:11 ص",
"title" : "طبيبة تجميل 'مزورة' تحقن مرضاها بالغراء والاسمنت",
"image_url" : "http://alamghareeb.com/Photos/L63556478891290039015.jpg",
"image_caption" : ""
]
【问题讨论】:
感谢您在 json 上发帖,但您能告诉我们您自己做了什么来解析这个吗? @sojoudahmad 您需要将该代码放入您的问题中,而不是在这里作为 cmets 顺便说一句,除非你真的需要可变对象,否则通常不应该使用可变对象。例如,我将json
对象的声明更改如下:NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error: &error];
另外,不建议使用dataWithContentsOfURL
(同步 JSON 函数)。我会使用sendAsynchronousRequest
或其他异步方法。
提示:JSONObjectWithData:
上有一个 error:
参数。使用它。
【参考方案1】:
此 JSON 无效。你是手动构建的吗? "item" = ...
应该是 "item" : ...
。
以后,您可以通过http://jsonlint.com 运行您的 JSON 以验证任何问题。同样,您应该在 Objective-C 代码中添加错误检查,例如
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: &error];
if (!json)
NSLog(@"JSON parsing error: %@", error);
我还建议将您的服务器代码更改为不手动构建 JSON,而是利用 JSON 函数(例如,如果是 php,则构建关联数组,然后使用 json_encode
函数生成 JSON 输出)。
因此,一旦您修复了 JSON 错误,解析结果可能如下所示:
NSError *error;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (!dictionary)
NSLog(@"NSJSONSerialization error: %@", error);
return;
NSArray *items = dictionary[@"item"];
for (NSDictionary *item in items)
NSString *identifier = item[@"id"];
NSString *created = item[@"created"];
NSString *title = item[@"title"];
NSString *urlString = item[@"image_url"];
NSString *caption = item[@"image_caption"];
NSLog(@"identifier = %@", identifier);
NSLog(@"created = %@", created);
NSLog(@"title = %@", title);
NSLog(@"urlString = %@", urlString);
NSLog(@"caption = %@", caption);
【讨论】:
OP 实际上贴出了部分端点结果:alamghareeb.com/mobileData.ashx?catid=0&No=10 至少部分问题似乎出在服务器端【参考方案2】:您可以使用NSJSONSerialization
。无需导入任何类。
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:[strResult dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
或者直接使用NSData
作为
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:theJSONDataFromTheRequest options:0 error:nil];
来源:Stackoveflow question
【讨论】:
以上是关于如何在ios7中解析这个json数据的主要内容,如果未能解决你的问题,请参考以下文章