多级JSON字典 - 无法将密钥提取到新字典中

时间:2013-02-28 16:08:59

标签: objective-c xcode json dictionary

我已经被问了几天了。我搜索了互联网,发现了许多答案,但似乎没有任何效果 - 我可能无法掌握如何修改我自己的代码。

我有一个JSON连接,我创建了一个字典。当我没有多级字典时,这一切都很有效,但是只要我有:

{
  "Table": [
    {
      "MENUID": 1072.0,
      "MENUDESC": "HOME           ",
      "PARENTMENUID": null,
      "NAVIGATETO": "content.aspx?item=1072&pid=0",
      "NAVIGATETO2": "default.aspx?item=1072&pid=0",
      "PROTECTED": null,
      "parentmenuid2": null
    },
    {
      "MENUID": 1073.0,
      "MENUDESC": "PRODUCTS & SERVICES",
      "PARENTMENUID": null,
      "NAVIGATETO": "#",
      "NAVIGATETO2": "default.aspx?item=1073&pid=0",
      "PROTECTED": null,
      "parentmenuid2": null
    }
  ]
}

我调整我的代码如下:

- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL: 
                        [NSURL URLWithString: @"http://adhoc.nyxtek.co.za/spfjsonws/default2.aspx"]];

        NSError* error;

        menuItems = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions 
                                                   error:&error];
        NSArray * allKeys = [menuItems allKeys];
        NSLog(@"Count : %d", [allKeys count]);


        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return menuItems.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TweetCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSDictionary *tweet = (NSDictionary *)[menuItems objectForKey:@"Table"];

    NSArray * allKeys = [tweet allKeys];
    NSLog(@"Count : %d", [allKeys count]);


    //NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"MENUDESC"];
    NSString *name = [tweet objectForKey:@"MENUID"];

    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

    return cell;
}

特别是这行代码不起作用:

NSDictionary *tweet = (NSDictionary *)[menuItems objectForKey:@"Table"];

我对外字典的第一次计数是1这是正确的,但我对上面新字典的第二次计数是0这是错误的。

由于我理解研究的重要性,因此我从研究之前的问题中应用了大部分内容,但我似乎仍然无法找到具体的错误。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

Table是一个数组(字典):

"Table": [
...
]

所以代码应该是:

NSArray *tweet = (NSArray *)[menuItems objectForKey:@"Table"];