0

我正在使用 JSON 加速器 ( http://nerdery.com/json-accelerator ) 将 JSON 字符串解析为 obj-c 类。

但是,我在获取 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”值(在“components”数组中)时,使用这行代码:

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.'

我是否已经正确使用“valueForKey:”访问 JSON 数组值?为什么我收到错误消息,但是当我将 'valueForKey:' 值更改为:@"icon" 或 @"background" 时,它就可以工作了。

4

1 回答 1

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"]);
}];
于 2013-04-23T04:38:16.893 回答