Мне нужно прочитать некоторые значения из вложенного 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"]];
Но я не знаю, как это исправить.
Спасибо.
2 ответа
То, что вы делаете, работает правильно. Значения для "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"}
]
{{X0}} - это ключ, найденный в {{X1}} laravel 4.
NSArray *addons = [[NSArray alloc] init];
addons = [[responseString objectFromJSONString] objectForKey: @"addons"];
Теперь в ваших надстройках массива у вас будут объекты словаря с ключами «group_title», «group_type», «item_id» и «addon». Внутри объекта с ключом «addon» у вас будет массив из двух словарных объектов с ключами «id» и «item_title».
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.