Search code examples
iosobjective-cjsonnsarray

How to convert NSArray ( in string format) to real Array format?


When i parse one JSON i got following result inside my NSArray

(
    {
    category = Allergies;
    group = Allergies;
    name = "Food Allergies";
    option = "";
    subGroup = "";
    type = VARCHAR;
},
    {
    category = Allergies;
    group = Allergies;
    name = "Drug Allergies";
    option = "";
    subGroup = "";
    type = VARCHAR;
},
    {
    category = Allergies;
    group = "";
    name = "Blood Group";
    option = "[{\"id\":1,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A+\"},{\"id\":2,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A-\"},{\"id\":3,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B+\"},{\"id\":4,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B-\"},{\"id\":5,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O+\"},{\"id\":6,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O-\"},{\"id\":7,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB+\"},{\"id\":8,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB-\"}]";
    subGroup = "";
    type = SINGLESELECT;
}
)

Now when i tried to take value for key "option"
[array valueForKey:@"option"]objectAtIndex:indexPath.row];

i got following result

 [{"id":1,"isDefault":false,"additionalOption":false,"optionName":"A+"},{"id":2,"isDefault":false,"additionalOption":false,"optionName":"A-"},{"id":3,"isDefault":false,"additionalOption":false,"optionName":"B+"},{"id":4,"isDefault":false,"additionalOption":false,"optionName":"B-"},{"id":5,"isDefault":false,"additionalOption":false,"optionName":"O+"},{"id":6,"isDefault":false,"additionalOption":false,"optionName":"O-"},{"id":7,"isDefault":false,"additionalOption":false,"optionName":"AB+"},{"id":8,"isDefault":false,"additionalOption":false,"optionName":"AB-"}]

but when tried to access "optionName" like following format

[optionArray valueForKey:@"optionName"]; then i got this error

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

Please help me to fix this..


Solution

  • Assuming you are using ios 5 or higher, JSON serialization is built in:

    NSArray *json = [NSJSONSerialization 
            JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding]
            options:kNilOptions 
            error:&error];
    

    Prior to ios5, you can use SBJSON to achieve the same:

    NSArray *jsonObjects = [jsonParser objectWithString:string error:&error];