从子类别中检索特定的 JSON 密钥
Posted
技术标签:
【中文标题】从子类别中检索特定的 JSON 密钥【英文标题】:Retrieve specific JSON key from subcategory 【发布时间】:2015-02-02 19:19:52 【问题描述】:我只在我的 TableView 上以 JSON 格式从服务器检索数据,它工作正常。我无法从 JSON 中打印特定主题。
例如,根据我的 JSON,我只想打印 Dining Room
或 Coffees
的名称,而没有 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 Room
和 Coffees
有什么共同点 Bedroom
没有共享?
它有同样的东西。我只是想学习如何在BEDROOM
或Coffees
下获取名称? @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。这似乎是来自 php 的 print_r
。
【讨论】:
它工作...是的,很抱歉使用这种类型的打印。以上是关于从子类别中检索特定的 JSON 密钥的主要内容,如果未能解决你的问题,请参考以下文章