2013-04-23 60 views
0

我使用JSON加速器(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.' 

順便說一句,MTJsonBaseModel和MTComponentsModel是由JS生成JSON類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"]); 
}];