Retrieving values from json using objective-c

后端 未结 3 1140
萌比男神i
萌比男神i 2020-12-29 15:54

I am currently trying to work with json and objective-c however having a bit of difficulty. The following is the json that is being returned

{
    sethostna         


        
3条回答
  •  灰色年华
    2020-12-29 16:39

    When in doubt, write down the structure of your JSON data. For example:

    {
        sethostname =     (
        {
            msgs = "Updating Apache configuration\nUpdating cPanel license...Done. Update succeeded.\nBuilding global cache for cpanel...Done";
            status = 1;
            statusmsg = "Hostname Changed to: a.host.name.com";
            warns =             (
            );
        });
    }
    

    (which is in NeXTSTEP property list format, actually) means that you have a top-level dictionary. This top-level dictionary contains a key called sethostname whose value is an array. This array is comprised of dictionaries, each dictionary having a set of keys: msgs, status, statusmsg, warns. msgs has a string value, status has a number value, statusmsg has a string value,warns` has an array value:

    dictionary (top-level)
        sethostname (array of dictionaries)
            dictionary (array element)
                msgs (string)
                status (number)
                statusmsg (string)
                warns (array)
                    ??? (array element)
    

    Having understood this structure, your code should look like:

    NSError *myError = nil;
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&myError];
    
    if (!res) { // JSON parser failed }
    
    // dictionary (top-level)
    if (![res isKindOfClass:[NSDictionary class]]) {
        // JSON parser hasn't returned a dictionary
    }
    
    // sethostname (array of dictionaries)
    NSArray *setHostNames = [res objectForKey:@"sethostname"];
    
    // dictionary (array element)
    for (NSDictionary *setHostName in setHostNames) {
        // status (number)
        NSNumber *status = [setHostName objectForKey:@"status"];
    
        // statusmsg (string)
        NSString *statusmsg = [setHostName objectForKey:@"statusmsg"];
    
        …
    }
    

提交回复
热议问题