ios - Objective C 如何读取嵌套的 JSON

标签 ios arrays json xcode nested

我必须从嵌套的 JSON 中读取一些值,但我无法正确读取它们。 JSON 看起来像这样:

 "addons" : [
      {
        "group_title" : "Veggie Toppings",
        "group_type" : "T",
        "item_id" : "29",
        "addon" : [
          {
            "id" : "31",
            "item_title" : "Ham"
          },
          {
            "id" : "32",
            "item_title" : "Mushrooms"
          }
        ]
      },
      {
        "group_title" : "Meat Toppings",
        "group_type" : "T",
        "item_id" : "33",
        "addon" : [
          {
            "id" : "30",
            "item_title" : "Sausage"
          }
        ]
      }

我的代码是:

-(void)setData:(NSMutableDictionary *)menuItems{
    self.menuItem = menuItems;
    // [GSDVActivityIndicator stopWithID:kNotificationHello];
    self.dictionaryOrder = [NSMutableDictionary dictionaryWithDictionary:[self.menuItem valueForKey:@"order"]];
    self.arrayPrices = [NSArray arrayWithArray:[self.menuItem valueForKey:@"price"]];
    self.arrayAddons = [NSArray arrayWithArray:[self.menuItem valueForKey:@"addons"]];
    self.myAddons = [NSArray arrayWithArray:[self.arrayAddons valueForKey:@"addon"]];

    [self setViewGUIData];

    NSLog ( @"addons= %@", [self.arrayAddons valueForKey:@"Group_title]);

    NSLog ( @"addon = %@", [self.myAddons valueForKey:@"item_title"]);

}

结果是:

2014-03-24 19:48:04.446 [3698:70b] addons= (
    "Veggie Toppings",
    "Meat Toppings"
)
2014-03-24 19:48:04.447 [3698:70b] addon = (
        (
        Ham,
        Mushrooms
    ),
        (
        "Sausage"
    )
)

所以问题出在第二部分,其中“火腿、蘑菇和香肠”项的格式不正确,我无法阅读它们并将它们放在标签中。显然这条线是错误的:

self.myAddons = [NSArray arrayWithArray:[self.arrayAddons valueForKey:@"addon"]];

但是我不知道怎么修改。

谢谢。

最佳答案

您所做的工作正常。 "addon"的值为 [{"id": "31", "item_title": "Ham"}, {"id": "32", "item_title": "Mushrooms"}]{"id": "30","item_title": "Sausage"},因此 valueForKey 为您提供了一个包含这两个值的数组。

你没有说出你想要什么格式,但我猜你想要一个简单的列表。您可以只创建一个数组,遍历组,然后放入每个插件:

NSMutableArray* addons = [NSMutableArray array];
NSArray* groups = [self.menuItem valueForKey:@"addons"];
[groups enumerateObjectsUsingBlock:^(NSDictionary* group, NSUInteger idx, BOOL *stop) {
    NSArray* addonsInThisGroup = group[@"addon"];
    [addonsInThisGroup enumerateObjectsUsingBlock:^(NSDictionary* addon, NSUInteger idx, BOOL *stop) {
        [addons addObject:addon];
    }];
}];

这会导致:

[
    {"id" : "31", "item_title" : "Ham"}, 
    {"id" : "32", "item_title" : "Mushrooms"}, 
    {"id" : "30","item_title" : "Sausage"}
]

关于ios - Objective C 如何读取嵌套的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618133/

相关文章:

ios - swift - 从 Reddit API 解码 JSON 响应(发表评论)

arrays - 为什么在 Ruby 中使用 keep_if 会跳过数组中的第一个元素?

javascript - 如何从 JSON XHR 请求获取数据以在我的模板中使用?

ios - 如何将xib的项目变成纯代码的项目?

ios - 如何对iOS应用程序代表方法的调用进行单元测试?

c# - 使用我的数组值生成随机数而不重复

javascript - 无法在 Sencha Touch 2 上显示嵌套 JSON

javascript - 使用 JavaScript 从网站获取 JSON

ios - 如何将自定义透明MKAnnotation添加到MKMapView?

python - 遍历数组查看非连续值