0

I'm using JSON Accelerator (http://nerdery.com/json-accelerator) for parsing JSON String to obj-c classes.

However, I have problem(s) to get the JSON NSArray values.

This is the JSON string value:

{
    "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
    }
}

When I want to access the "component_id" value (inside the "components" array), using this line of code:

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"]

It's just get an error:

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

Am I already correct using 'valueForKey:' for accessing the JSON array value? Why am I getting an error but when I change the 'valueForKey:' value to: @"icon" or @"background" it just works.

1 Answer 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"]);
}];
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.