NSCFString 0x2749a0 valueForUndefinedKey this clas

2019-08-15 04:00发布

问题:

my json :

{
 "name": "notification",
 "args": [
         "{\"data\":  [{\"foreignId\":\"BF7E9276D8607DA5916F796F9F1B9743_2\",\"id\":\"\",\"img\":{\"small\":\"http://jiepang.com/static/img/icon-special-newbie.gif\"},\"poiId\":\"4fe133bb581f7129d6c3f2b3\",\"poiName\":\"Incubation Club Cafe - ICC\",\"source\":\"jiepang\",\"what\":\"aaaa。\",\"when\":\"\"}],\"size\":3,\"toWho\":[\"4ffa80c8e4b0f73fa2b758c9\"],\"type\":5,\"when\":\"2012-07-09T17:23:24Z\"}"
 ]
}

my code :

 NSDictionary* data=(NSDictionary *)[packet.data JSONValue];

NSString* str=[NSString stringWithFormat:@"%@",[data objectForKey:@"name"]];
txtview.text = [txtview.text stringByAppendingString:str];


NSData *jsonData = [packet.data dataUsingEncoding:NSUTF8StringEncoding];
__autoreleasing NSError* error = nil;
NSDictionary *resultdata = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
// NSDictionary* arr=[data valueForKeyPath:@"args.data"];

NSMutableDictionary *peopleListFromJson = [[NSMutableDictionary alloc] init];
peopleListFromJson = [resultdata valueForKeyPath:@"args.data"];
// NSArray *peopleListFromJson = [[result objectForKey:@"data"]objectForKey:@"list"];


if ( ![peopleListFromJson isKindOfClass:[NSArray class]] && peopleListFromJson!=nil) {
    peopleListFromJson =[NSArray arrayWithObject:peopleListFromJson];
}

for (NSDictionary *peopleFromJson in peopleListFromJson)
{

    if([peopleFromJson objectForKey:@"foreignId"]!=[NSNull null])
    {


        NSString* str=[NSString stringWithFormat:@"%@",[peopleFromJson objectForKey:@"foreignId"]];
        txtview.text = [txtview.text stringByAppendingString:str];
    }
}

but it give me:

[<__NSCFString 0x2749a0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key data.'
*** First throw call stack:

I am using ios5, without ARC.

回答1:

This means that your key path is not correct. You can't use key path when dealing with arrays because it is unknown which item of the array you need.

You need to access the NSArray stored under the key args, then pull out the first item (which is a string), then convert that string into a NSDictionary, then pull out the key for data.

A quicker way is to make sure your JSON is formatted better:

{
  "name": "notification",
  "args": {"data": [{"foreignId": "BF7E9276D8607DA5916F796F9F1B9743_2", "id": "", "img":{"small": "http://jiepang.com/static/img/icon-special-newbie.gif"}, "poiId":"4fe133bb581f7129d6c3f2b3", "poiName":"Incubation Club Cafe - ICC","source":"jiepang","what":"aaaa。","when":""}],"size":3,"toWho":["4ffa80c8e4b0f73fa2b758c9"],"type":5,"when":"2012-07-09T17:23:24Z"}]
}


标签: ios json sbjson