Мне нужно прочитать некоторые значения из вложенного 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"]];

Но я не знаю, как это исправить.

Спасибо.

1
user3194296 24 Мар 2014 в 22:52
1
Во втором nslog у вас есть «itemtitle», но ключ в словаре: «item_title», как это работает?
 – 
Robert
24 Мар 2014 в 23:23
Названия ключей были на моем родном языке, поэтому я отредактировал их для поста, но проблема не в этом, он работает в Xcode, я просто написал с ошибкой в ​​этом посте.
 – 
user3194296
24 Мар 2014 в 23:33

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"}
]
1
dokkaebi 24 Мар 2014 в 23:32
Большое спасибо :D теперь у меня есть аддон = ( Ветчина, Грибы, "Колбаса Амечи" ) Знаете, почему Ветчина и грибы без кавычек?
 – 
user3194296
24 Мар 2014 в 23:48
1
При отображении строк в консоли он будет использовать кавычки только в случае необходимости. Ameci Sausage получает их, потому что у нее есть место.
 – 
dokkaebi
24 Мар 2014 в 23:56

{{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».

1
prelite 24 Мар 2014 в 23:59