2015-02-10 5 views
1

Привет, ребята,RestKit ключ существование в stractured объектов

Я хочу сопоставить мою сложную структуру JSON, которая извлекается из моего сервера с RestKit.

Вот структура JSON пример:

"_cat0": [ 
    { 
     "title": "category header", 
     "catId": 1 
    }, 
    { 
     "id": 542232, 
     "title": "post post", 
     "time": "1421744040" 
    }, 
    { 
     "id": 542232, 
     "title": "post post", 
     "time": "1421744040" 
    }, 
    { 
     "id": 542232, 
     "title": "post post", 
     "time": "1421744040" 
    } 
], 

Как вы можете видеть здесь, у нас есть объект головы, который представляет категорию каждой секции. "_cat0" фактически является префиксом, который содержит полные данные каждой категории в JSON. Этот префикс является непрерывным и содержит все внутри, что означает: сообщения, данные категории и другие параметры.

Первый объект в каждой категории содержит название и категорию идентификатор

{ 
     "title": "category header", 
     "catId": 1 
    } 

И другие объекты содержит сообщение категории.

Моя проблема с RestKit заключается в том, чтобы найти объект Post и объект Category по значениям в JSON.

Я думал о поиске уникального ключа внутри головного объекта и хранить его как объект категории, а затем любые другие объекты в JSON, хранящиеся в виде сообщения. Но я не нашел никаких функций, которые могут помочь мне в существовании ключа или проверить, является ли ключ объекта нулевым.

Вот моя попытка по этому вопросу:

if ([representation containsValueForKey:@"catId"]) { 
     // it's a category object 
     return categoryMapping; 
    } else { 
     // it's a post object 
     return postMapping; 
    } 

Но этот код вылетает после запуска.

Любые идеи по этой проблеме?

+0

Добро пожаловать в Переполнение стека. Если вам нужна помощь в отладке сбоя, отправьте сообщение о трассировке и сообщении об ошибке сбоя. –

ответ

1

Если вы назначили массив JSON к объекту с именем _cat0, вы можете сделать следующее:

for (NSDictionary *object in _cat0) { 
    if ([[object allKeys] contains:@"catId"]) { 
    // Process object as category metadata. 
    } else { 
    // Process object as a post. 
    } 
} 

Если у вас есть контроль над ответом JSON, я сильно рекомендую вам сделать его структура более значима. Что-то вроде линий:

"_cat0": { 
    "title": "category header", 
    "catId": 1 
    "posts": [ 
     { 
      "id": 542232, 
      "title": "post post", 
      "time": "1421744040" 
     }, 
     { 
      "id": 542232, 
      "title": "post post", 
      "time": "1421744040" 
     }, 
     { 
      "id": 542232, 
      "title": "post post", 
      "time": "1421744040" 
     } 
    ] 
}, 
+0

На самом деле, как сказал Ян, эта структура JSON более значима. Тогда выборка и отображение JSON с помощью RestKit проще. –

+0

@ Я так изменил структуру JSON, у вас есть учебник для правильного пути? –