2013-04-23 6 views
0

Я использую JSON Accelerator (http://nerdery.com/json-accelerator) для разбора строки JSON для классов obj-c.Получение значений NSArray JSON

Однако у меня есть проблема (ы), чтобы получить значения JSON NSArray.

Это значение строки JSON:

{ 
    "status": { 
     "code": 200, 
     "description": "OK" 
    }, 
    "message": "", 
    "data": { 
     "app_id": 1, 
     "name": "metrodummy", 
     "description": "dummies are dummies", 
     "website": "metrofy.com", 
     "twitter": "twittwat", 
     "facebook": "faceycace", 
     "homepage": { 
      "homepage_id": 1, 
      "background": "bg", 
      "icon": "homepageico", 
      "image_position": "Top", 
      "image_position_param": "value;", 
      "image_position_value": "Top;", 
      "text": "lalilulala", 
      "text_position": "Left Top", 
      "text_position_param": "value;", 
      "text_position_value": "LeftTop;", 
      "text_color": "green", 
      "layout": { 
       "layout_id": 0, 
       "layout_name": null, 
       "layout_thumbnail": null, 
       "layout_code": "codecode", 
       "device_type": "iOS", 
       "layout_template": null 
      } 
     }, 
     "app_design": { 
      "application_design_id": 1, 
      "icon": "ico", 
      "background": "bg", 
      "splash_screen": "splashy", 
      "primary_font": "Courier New", 
      "primary_font_param": "", 
      "primary_font_value": "", 
      "secondary_font": "Verdana", 
      "secondary_font_param": "", 
      "secondary_font_value": "", 
      "layout": { 
       "layout_id": 0, 
       "layout_name": null, 
       "layout_thumbnail": null, 
       "layout_code": "codecode", 
       "device_type": "iOS", 
       "layout_template": null 
      } 
     }, 
     "components": [ 
      { 
       "component_id": 1, 
       "name": "berita nyos", 
       "background": "bg", 
       "icon": "ico", 
       "image_position": "Top", 
       "image_position_param": "value;", 
       "image_position_value": "Top;", 
       "enable_facebook": true, 
       "enable_email": true, 
       "enable_twitter": true, 
       "enable_like": true, 
       "enable_rate": true, 
       "enable_comment": true, 
       "endpoint_api": "api", 
       "layout": { 
        "layout_id": 0, 
        "layout_name": null, 
        "layout_thumbnail": null, 
        "layout_code": "codecode", 
        "device_type": "iOS", 
        "layout_template": null 
       } 
      }, 
      { 
       "component_id": 2, 
       "name": "berita lama", 
       "background": "bg", 
       "icon": "ico", 
       "image_position": "Top", 
       "image_position_param": "value;", 
       "image_position_value": "Top;", 
       "enable_facebook": true, 
       "enable_email": true, 
       "enable_twitter": true, 
       "enable_like": true, 
       "enable_rate": true, 
       "enable_comment": true, 
       "endpoint_api": "api", 
       "layout": { 
        "layout_id": 0, 
        "layout_name": null, 
        "layout_thumbnail": null, 
        "layout_code": "codecode", 
        "device_type": "iOS", 
        "layout_template": null 
       } 
      }, 
      { 
       "component_id": 5, 
       "name": "product component", 
       "background": "bg", 
       "icon": "ico", 
       "image_position": "Top", 
       "image_position_param": "value;", 
       "image_position_value": "Top;", 
       "enable_facebook": true, 
       "enable_email": true, 
       "enable_twitter": true, 
       "enable_like": true, 
       "enable_rate": true, 
       "enable_comment": true, 
       "endpoint_api": "api", 
       "layout": { 
        "layout_id": 0, 
        "layout_name": null, 
        "layout_thumbnail": null, 
        "layout_code": "codecode", 
        "device_type": "iOS", 
        "layout_template": null 
       } 
      } 
     ], 
     "is_current": true, 
     "is_published": false 
    } 
} 

Когда я хочу, чтобы получить доступ к "component_id" значение (внутри "компонентов" массив), используя следующую строку кода:

NSDictionary *jsonContent = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; 

MTJsonBaseModel *baseClass = [MTJsonBaseModel modelObjectWithDictionary:jsonContent]; 

NSArray *dataComponents = [NSArray arrayWithArray:baseClass.data.components]; 

[[self.dataComponents objectAtIndex:0] valueForKey:@"component_id"] 

это просто получаю сообщение об ошибке:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MTComponentsModel 0x7566c20> valueForUndefinedKey:]: this class is not key value coding-compliant for the key component_id.' 

Btw, MTJsonBaseModel и MTComponentsModel является JSON класс, который генерируется JS ON Акселератор.

Я уже правильно использую значение valueForKey: для доступа к значению массива JSON? Почему я получаю сообщение об ошибке, но когда я меняю значение valueForKey: 'на: @ "icon" или @ "background", он просто работает.

ответ

1
NSDictionary *jsonContent = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; 
NSArray *arr = [[jsonContent objectForKey:@"data"] objectForKey:@"components"]; 

// To read array Components 
[arr enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop){ 
    NSLog(@"%@",[object valueForKey:@"component_id"]); 
}];