Глядя на отправленную вами строку JSON, response.groups.items выглядит как массив, содержащий один элемент, карту / словарь, содержащий один ключ, «категории». Выход его в строку будет проходить через все дерево, но чтобы получить к нему программный доступ, вы должны сами пройтись по дереву. Не видя более полного примера JSON, трудно сказать, что именно нужно сделать здесь.
EDIT:
Обойти такой граф объектов не так просто; Есть несколько разных подходов (сначала глубина, ширина и т. д.), поэтому это не обязательно то, для чего вам нужен простой API. Я не уверен, что это та же библиотека JSON, которую вы используете, но, например, это код из библиотеки JSON, который выполняет работу по генерации строки, которую вы видите , Как вы можете видеть, это немного запутанно - конечно, не однострочник или что-то в этом роде.
Вы можете попробовать это, которое я представляю без тестирования или гарантии:
void __Traverse(id object, NSUInteger depth)
{
NSMutableString* indent = [NSMutableString string];
for (NSUInteger i = 0; i < depth; i++) [indent appendString: @"\t"];
id nextObject = nil;
if ([object isKindOfClass: [NSDictionary class]])
{
NSLog(@"%@Dictionary {", indent);
NSEnumerator* keys = [(NSDictionary*)object keyEnumerator];
while (nextObject = [keys nextObject])
{
NSLog(@"%@\tKey: %@ Value: ", indent, nextObject);
__Traverse([(NSDictionary*)object objectForKey: nextObject], depth+1);
}
NSLog(@"%@}", indent);
}
else if ([object isKindOfClass: [NSArray class]])
{
NSEnumerator* objects = [(NSArray*)object objectEnumerator];
NSLog(@"%@Array (", indent);
while (nextObject = [objects nextObject])
{
__Traverse(nextObject, depth+1);
}
NSLog(@"%@)", indent);
}
else
{
NSLog(@"%@%@",indent, object);
}
}
void Traverse(id object)
{
__Traverse(object, 0);
}