目标 C 解析 JSON,字典返回 NSCFString 而不是 NSArray



我想做的是获取一个JSON提要,然后循环浏览结果。但是,当我从字典中获取对象时,我不断得到一个字符串而不是数组。对我做错了什么有什么想法吗?

这是 JSON:

[
  {
    "_id": "4f6d9a7c1d0b4900010007ee",
    "geo_triggers": [
      {
        "_id": "4fc3e5fdc7234e0001000002",
        "location": [1,1],
        "longitude": "1",
        "latitude": "1",
        "radius": 1,
        "location_name": "Test 1"
      },
      {
        "_id": "4fc61f3762f53f0001000043",
        "location": [-71.057673,42.355395],
        "longitude": "-71.057673",
        "latitude": "42.355395",
        "radius": 1000,
        "location_name": "Test2"
      }
    ]
  }
]

以下是目标 C 代码:

const char* className = class_getName([result class]);
NSLog(@"Result is a: %s", className);
NSLog(@"%@", result); //string
NSArray* json = [result objectForKey:@"result"]; //should be an array of dictionaries
NSLog(@"JSON Output: %@", json);
const char* className1 = class_getName([json class]);
NSLog(@"yourObject is a: %s", className1);

这是输出:

Result is a: __NSDictionaryI
2012-10-10 17:15:15.165 App[12980:19d03] {
    result = "[{"_id":"4f6d9a7c1d0b4900010007ee","geo_triggers":[{"_id":"4fc3e5fdc7234e0001000002","location":[1.0,1.0],"longitude":"1","latitude":"1","radius":1,"location_name":"Test 1"},{"_id":"4fc61f3762f53f0001000043","location":[-71.057673,42.355395],"longitude":"-71.057673","latitude":"42.355395","radius":1000,"location_name":"Test2"}]}]";
}
2012-10-10 17:15:15.166 App[12980:19d03] JSON Output: [{"_id":"4f6d9a7c1d0b4900010007ee","geo_triggers":[{"_id":"4fc3e5fdc7234e0001000002","location":[1.0,1.0],"longitude":"1","latitude":"1","radius":1,"location_name":"Test 1"},{"_id":"4fc61f3762f53f0001000043","location":[-71.057673,42.355395],"longitude":"-71.057673","latitude":"42.355395","radius":1000,"location_name":"Test2"}]}]
2012-10-10 17:15:15.166 App[12980:19d03] yourObject is a: __NSCFString
2012-10-10 17:15:15.166 App[12980:19d03] -[__NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xb331800

您的result变量指向字典。 字典包含一个键。 那把钥匙是@"result" .该键的值是一个字符串,@"[{"_id":"4f6d9a7c1d0b4900010... .

换句话说,您还没有真正反序列化您的 JSON。 您需要获取键result的值,并通过 JSON 反序列化程序运行它。

首先需要解码结果。以上是JSON,所以我建议这样做

  1. 如果您还没有,请下载 JSONKit.h 并将其包含在您的项目中
  2. 然后你可以做

    1. NSString* json = [result JSONString];查看输出
    2. 类似id jsonDict = [[JSONDecoder decoder] objectWithData:responseData]; 之后你可以做 [jsonDict objectForKey:@"_id"];等

最新更新