如何将 NSCFArray(可能的 JSON)序列化为 NSDictionary?

Posted

技术标签:

【中文标题】如何将 NSCFArray(可能的 JSON)序列化为 NSDictionary?【英文标题】:How to Serialize a NSCFArray (possible JSON) to NSDictionary? 【发布时间】:2012-07-15 13:08:03 【问题描述】:

在使用 BZForursquare 将附近的场地放入 UITableView 时,我现在真的被卡住了。

BZFoursquare:https://github.com/baztokyo/foursquare-ios-api

我在 requestDidFinishLoading 委托方法中得到了我的 Requestresult。在这个方法中,请求对象包含几个 NSDictionaries,一个字典在 request.response 中。此响应字典包含一个带有 key="venues" 的条目,并且作为 JSON 对象的值。当我将此值对象放入字典时,类型似乎不是字典而是 NSCFArray:

#pragma mark BZFoursquareRequestDelegate
- (void)requestDidFinishLoading:(BZFoursquareRequest *)request 
    self.meta = request.meta;
    self.notifications = request.notifications;
    self.response = [request.response objectForKey:@"venues"];
    self.request = nil;
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    NSLog(@"%@",[self.response objectForKey:@"name"]);

我假设这是因为 NSLog Line 给了我以下错误:

-[__NSCFArray objectForKey:]:无法识别的选择器发送到实例 0x1e5c90f0

现在我完全感到困惑,并尝试了一些失败的尝试来将这个 JSON 从任何类型的 od 数据类型中获取到 NSDictionary 中。一种尝试是将值 Object 放入 NSString 并使用

[NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];

将其放入字典中,但这也失败了,因为它仍然是一个 NSCFArray。有人可以告诉我如何获得

的内容
[request.response objectForKey:@"venues"]

放入 NSDictionary 以便我可以使用此内容填充我的 UITabelview?

编辑:

这是 Dictionary request.response 的值部分的内容:

(
    
    categories =         (
                    
            icon =                 
                name = ".png";
                prefix = "https://foursquare.com/img/categories/food/default_";
                sizes =                     (
                    32,
                    44,
                    64,
                    88,
                    256
                );
            ;
            id = 4bf58dd8d48988d10b941735;
            name = "Falafel Restaurant";
            pluralName = "Falafel Restaurants";
            primary = 1;
            shortName = Falafel;
        
    );
    contact =         
    ;
    hereNow =         
        count = 0;
        groups =             (
        );
    ;
    id = 4df3489dfa76abc3d86c4585;
    likes =         
        count = 0;
        groups =             (
        );
    ;
    location =         
        cc = DE;
        city = "Vinn";
        country = Germany;
        distance = 92;
        lat = "51.44985";
        lng = "16.648693";
        state = "Nordrhein-Westfalen";
    ;
    name = "Yildiz D\U00f6ner";
    specials =         (
    );
    stats =         
        checkinsCount = 3;
        tipCount = 0;
        usersCount = 2;
    ;
    verified = 0;

这似乎来自 NSCFArray 的类型。以及如何从另一个字典创建,以便我可以通过键访问 JSON 值?对不起,如果我今天真的很慢......

【问题讨论】:

您能否记录下您从网络服务返回的 JSON? 【参考方案1】:

您要求“场地”,我认为这是一个这样的数组。所以在反序列化 json 之后,记录返回对象看看你得到了什么。几乎可以肯定是一系列字典。

【讨论】:

以上是关于如何将 NSCFArray(可能的 JSON)序列化为 NSDictionary?的主要内容,如果未能解决你的问题,请参考以下文章

UIImage * 是 __NSCFArray 而不是 UIImage

使用 Newtonsoft 将 JSON 反序列化为 .NET 对象(或者可能是 LINQ to JSON?)

如何将 Thingsboard 中的时间序列数据作为 CSV 或 JSON 文件保存到外部文件系统? [关闭]

通过将 JSON 数据与数组进行比较来创建数组

将 JSON 响应保存为变量以使用 SwiftyJSON 反序列化

json 字符串中一个 value 多种类型的反序列化