Получение объекта, когда ключ неизвестен? - PullRequest
2 голосов
/ 04 октября 2011

У меня есть несколько json, как показано ниже, которые я пытаюсь превратить в nsdictionaries.Моя проблема в том, что 1, 5 и 4 являются ключами с непредсказуемыми значениями.Как мне получить каждый объект - {"id": "A", "name": "Nike"} - без знания ключа?

// JSON looks like:
{
"shops":
{
"1":{"id":"A","name":"Nike"},
"5":{"id":"G","name":"Apple"}
"4":{"id":"I","name":"Target"}
}
}

// how to step thru this?
NSArray *shopsArray = [[shopsString JSONValue] objectForKey:@"shops"];

1 Ответ

3 голосов
/ 04 октября 2011

Возвращенный объект из objectForKey:@"shops" на самом деле является экземпляром NSDictionary, а не NSArray, поскольку ключи на самом деле являются строками, а не числовыми значениями.

Для ваших целей вы можете просто позвонить -allValues на полученном NSDictionary.

NSDictionary *shops = [[shopsString JSONValue] objectForKey:@"shops"];

for(id obj in [shops allValues]) {
  //do stuff with obj...
}

РЕДАКТИРОВАТЬ : Если вам нужно упорядочить значения, вы можете сделать что-то вроде следующего:

Сначала измените входящий JSON на такую ​​структуру:

{
  "shops":[
      {"key":"1", "id":"A","name":"Nike"},
      {"key":"5","id":"G","name":"Apple"},
      {"key":"4", "id":"I","name":"Target"}
  ]
}

Тогда вы можете упорядочить объекты в массиве.

NSArray *shops = [[shopsString JSONValue] objectForKey:@"shops"];
for(NSDictionary *shop in shops) {
  NSString *key = [shop objectForKey:@"key"];
  //...
}
...