从子类别中检索特定的 JSON 密钥

Posted

技术标签:

【中文标题】从子类别中检索特定的 JSON 密钥【英文标题】:Retrieve specific JSON key from subcategory 【发布时间】: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”要求感到困惑。您能否提供您期望的完整输出? 【参考方案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。这似乎是来自 phpprint_r

【讨论】:

它工作...是的,很抱歉使用这种类型的打印。

以上是关于从子类别中检索特定的 JSON 密钥的主要内容,如果未能解决你的问题,请参考以下文章

从子类别术语中定位 WooCommerce 产品类别存档页面

如何在 JSON 的 Recycler 视图中显示特定类别

检索递归 SQL 查询中的特定级别

获取带有特定类别附件的帖子?

如何在woocommerce中获取特定类别的所有产品?

检索按类别分组的 SQL 结果