在 IOS 中解析嵌套的 Json

Posted

技术标签:

【中文标题】在 IOS 中解析嵌套的 Json【英文标题】:parsing a nested Json in IOS 【发布时间】:2014-04-08 13:19:33 【问题描述】:

我刚开始使用 ios 编程,我必须解析嵌套的 Json 文件并提取项目和标签,问题是我必须在 tableview 上显示项目列表并在每次单击时刷新我的 tableview我的表格视图的一行: 我确实显示了我的项目的第一个列表,但我试图显示我的嵌套项目并将它们显示在我的“新”tableview 上: 这是我的 JSON 代码和我的 Objective-C 代码的简单代码:

"results": 
    "items": [
      
        "id": "0100",
        "label": "Actualités",
        "cover": "http://XXXX_01.jpg",
        "coverFrom": "XXX-03",
        "coverTo": "2031-CCC18",
        "coverOrder": 1,
        "items": [
          
            "id": "0101",
            "label": "Actualité / Infos",
            "cover": "http://XXXX.jpg",
            "coverFrom": "2014XXX-24",
            "coverTo": "2031-XXXX18",
            "coverOrder": 1,
            "items": [

            ]
          ,

和我的 RootViewContoller 包含函数 connectionDidFinishiongLoading** 的代码

 // we will follow the format of our nested JSON
    NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:dataRequest options:0 error:nil];
    NSDictionary *results = [allDataDictionary objectForKey:@"results"];
    NSArray *arrayOfItems = [results objectForKey:@"items"];

    for (NSDictionary *diction in arrayOfItems) 

        //NSArray *ide = [diction objectForKey:@"id"];
        NSString *label = [diction objectForKey:@"label"];

       // add new object founded
        [array addObject:label];

        
    // reload my tableview

    [[self tableView]reloadData];


   // myParsingResults = [NSJSONSerialization JSONObjectWithData:dataRequest options:nil error:nil];
    [[self tableView]reloadData];

【问题讨论】:

你到底在哪里被屏蔽了? 您能否添加更多关于您希望如何显示它们的信息? 我认为解决这个问题的关键是使用一个表格视图控制器,它能够在选择“项目”行时推送同一表格视图控制器的新实例。您最终得到的是表格视图控制器的“动态”层次结构。用 segues 定义这个是可能的。 你可以使用开源项目Mantle来解析/映射json,使用非常简单! 我想显示所有父项,然后当我点击每个项目时,我得到每个项目的子项目,当我点击每一行时我被阻止我没有得到一个新的我的 tableview 的实例,但旧的具有相同项目(而不是子项目) 【参考方案1】:

如果我理解正确,请尝试类似的方法:

NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:dataRequest options:0 error:nil];
NSDictionary *results = [allDataDictionary objectForKey:@"results"];
NSArray *array = [results objectForKey:@"items"];

NSMutableArray *arrayLabels = [[NSMutableArray alloc] init];
NSDictionnary *dicoTemp = [array objectAtIndex:0];
while([dicoTemp objectForKey:@"items"])

    arrayLabels addObject:[[dicoTemp objectForKey:@"items"] objectForKey:@"label"];
    NSArray *arrayTemp = [dicoTemp objectForKey:@"items"];
    dicoTemp = [arrayTemp objectAtIndex:0]; //I don't know how you JSON ends, you may have to check if [arrayTemp count] > 0. I presumed that at the end, there was no object for key "items"


[[self tableView] reloadData];

在我看来,这是一个奇怪的嵌套 JSON 响应。

【讨论】:

我的整个 Json 都是一样的,你将把项目嵌套到项目中等等!但我不明白的是,我将在我的表格视图中显示什么???数组 temp 或 arraylabels,因为我需要它来重复 numberOfRowsInSection (在每个部分中)和 cellDorRowAtIndexPath ! 根据您的代码,您只向array 添加了“标签”。所以我猜那是你的 tableView 的“数据源”。但是您可以在其中放置一个 NSDictionnary,并将其“用作数据源”。所以你可以先使用/显示arrayLabels @user3511071 我认为这里的问题是你的 JSON 太奇怪了,你为什么要这样嵌套 Items?你应该调整那个 JSON 我不能!这是他们给我的项目!他们要我解析这个奇怪的嵌套 Json!我使用的所有解决方案都不起作用:(【参考方案2】:

试试这个……

 NSError *error = nil;

        NSURL *Url = [[NSURL alloc] initWithString:@"Your URL"];

        jsonData = [NSData dataWithContentsOfURL:Url options:NSDataReadingUncached error:&error];

        if(jsonData==Nil)
            UIAlertView * alert=[[UIAlertView alloc]initWithTitle:@"Error" message:@"Please check your internet connection" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
            [alert show];
        
        else

            NSDictionary *dataDictionary =[[NSDictionary alloc]init];
            dataDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

            [array addObject:[[[dataDictionary objectForKey:@"results"] valueForKey:@"items"] valueForKey:@"label"]];

        

并重新加载您的表格视图。

【讨论】:

以上是关于在 IOS 中解析嵌套的 Json的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mantle 在 iOS 中解析嵌套的 json

在 iOS 的 RestKit 中解析嵌套的 JSON

如何在 Ios 中解析数组数据中的嵌套 Json 对象

IOS/Swift/JSON:使用 swiftyJSON 解析嵌套的 JSON

IOS JSON解析嵌套数据

如何解析嵌套的 JSON 对象?