NSCFString 0x2749a0 valueForUndefinedKey this clas

2019-08-15 03:49发布

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.

标签: ios json sbjson
1条回答
等我变得足够好
2楼-- · 2019-08-15 04:42

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"}]
}
查看更多
登录 后发表回答