【问题标题】:Retrieve specific JSON key from subcategory从子类别中检索特定的 JSON 密钥
【发布时间】:2015-02-02 19:19:52
【问题描述】:

我只在我的 TableView 上以 JSON 格式从服务器检索数据,它工作正常。我无法从 JSON 中打印特定主题。

例如,根据我的 JSON,我只想打印 Dining RoomCoffees 的名称,而没有 Bedroom。我怎样才能做到这一点?

我只能用我的代码打印子类别 > products(names) 的全名。

代码:

-(void)getJSON{

NSString *string = BaseURLString;
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    _dic  = (NSDictionary *)responseObject;

    for (NSDictionary *dict in [_dic objectForKey:@"categories"]) {

        if ([[dict valueForKey:@"sub_category"]  isKindOfClass:[NSArray class]])
        {
            [_arraySubCategory addObject:[[[dict valueForKey:@"sub_category"] valueForKey:@"products"] valueForKey:@"name"]];

        }

    }

我的 JSON 数据:

Array
(
[categories] => Array
    (
        [0] => Array
            (
                [category_id] => 100
                [name] => Shop By Room
                [sub_category] => Array
                    (
                        [0] => Array
                            (
                                [category_id] => 72
                                [name] => BEDROOM
                                [sub_category] => 0
                                [product_total] => 11
                                [products] => Array
                                    (
                                        [0] => Array
                                            (
                                                [product_id] => 138
                                                [name] => Jewellery  Holder
                                            )

                                        [1] => Array
                                            (
                                                [product_id] => 139
                                                [name] => Jewellery Holder
                                            )

                                            )

                                    )

                            )

                        [1] => Array
                            (
                                [category_id] => 67
                                [name] => DINING ROOM
                                [sub_category] => 0
                                [product_total] => 73
                                [products] => Array
                                    (
                                        [0] => Array
                                            (
                                                [product_id] => 248
                                                [name] => Amuse
                                            )

                                        [1] => Array
                                            (
                                                [product_id] => 239
                                                [name] => Amuse
                                            )

                                            )
                                            .
                                            .
                                            .
       [1] => Array
            (
                [category_id] => 101
                [name] => Drink
                [sub_category] => Array
                    (
                        [0] => Array
                            (
                                [category_id] => 103
                                [name] => Coffees 
                                [sub_category] => 0
                                [product_total] => 14
                                [products] => Array
                                    (
                                        [0] => Array
                                            (
                                                [product_id] => 229
                                                [name] => Cafe1
                                            )

                                        [1] => Array
                                            (
                                                [product_id] => 233
                                                [name] => Cafe2

                                            )

【问题讨论】:

  • Dining RoomCoffees 有什么共同点 Bedroom 没有共享?
  • 它有同样的东西。我只是想学习如何在BEDROOMCoffees 下获取名称? @IanMacDonald
  • 请根据您已经提供的 JSON 输入描述您想要的输出。
  • @IanMacDonald 例如我想要这个输出Amuse 两次和(Cafe1&Cafe2)。这是你问我的吗?
  • 我对您的“没有Bedroom”要求感到困惑。您能否提供您期望的完整输出?

标签: ios json nsarray nsdictionary


【解决方案1】:

我真的不确定你具体要问什么。看起来您只想打印出Coffees 中的值。使用if (...) continue; 跳过与您想要的条件不匹配的类别和子类别。

for (NSDictionary *dict in [_dic objectForKey:@"categories"]) {

    if (![dict[@"name"] isEqualToString:@"Drink"]) continue;

    for (NSDictionary *subcategory in [dict valueForKey:@"sub_category"])
    {

        if (![subcategory[@"name"] isEqualToString:@"Coffees"]) continue;

        for (NSDictionary *product in subcategory[@"products"]) {
            [_arraySubCategory addObject:product[@"name"]];
        }

    }

}

您还应该注意,您发布的 JSON 格式不是有效的 JSON。这似乎是来自 PHP 的 print_r

【讨论】:

  • 它工作...是的,很抱歉使用这种类型的打印。
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 2017-12-31
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多