如何在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数据的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型

xcode如何等到json数据解析?

如何在 django 中解析这个 JSON?

如何在颤振中解析这个复杂的json

如何在 Flutter 中解析这个 JSON 数组?

我如何解析来自 openlibrary api 的 Json 数据? (适当地)