Iphone 如何从JSON获取数据?

Iphone 如何从JSON获取数据?,iphone,objective-c,json,Iphone,Objective C,Json,我收到的回复是JSON格式的,过去从未解析过,所以请有人帮助我理解这一点。 下面是我得到的Json响应: 推特回复: ( { contributors = "<null>"; coordinates = "<null>"; "created_at" = "Tue Nov 29 15:48:35 +0000 2011"; entities = { hashtags

我收到的回复是JSON格式的,过去从未解析过,所以请有人帮助我理解这一点。 下面是我得到的Json响应:

推特回复:

(
    {
        contributors = "<null>";
        coordinates = "<null>";
        "created_at" = "Tue Nov 29 15:48:35 +0000 2011";
        entities =         {
            hashtags =             (
            );
            media =             (
                                {
                    "display_url" = "pic.twitter.com/650E1WRY";
                    "expanded_url" = "http://twitter.com/ashu1702/status/141544088850796545/photo/1";
                    id = 141544088854990848;
                    "id_str" = 141544088854990848;
                    indices =                     (
                        22,
                        42
                    );
                    "media_url" = "http://p.twimg.com/AfbdmVBCEAAPJvT.jpg";
                    "media_url_https" = "https://p.twimg.com/AfbdmVBCEAAPJvT.jpg";
                    sizes =                     {
                        large =                         {
                            h = 279;
                            resize = fit;
                            w = 215;
                        };
                        medium =                         {
                            h = 279;
                            resize = fit;
                            w = 215;
                        };
                        small =                         {
                            h = 279;
                            resize = fit;
                            w = 215;
                        };
                        thumb =                         {
                            h = 150;
                            resize = crop;
                            w = 150;
                        };
                    };
                    type = photo;
                    url = "http://t.co/650E1WRY";
                }
            );
            urls =             (
            );
            "user_mentions" =             (
            );
        };
        favorited = 0;
        geo = "<null>";
        id = 141544088850796545;
        "id_str" = 141544088850796545;
        "in_reply_to_screen_name" = "<null>";
        "in_reply_to_status_id" = "<null>";
        "in_reply_to_status_id_str" = "<null>";
        "in_reply_to_user_id" = "<null>";
        "in_reply_to_user_id_str" = "<null>";
        place = "<null>";
        "possibly_sensitive" = 0;
        "retweet_count" = 0;
        retweeted = 0;
        source = "<a href=\"http://www.apple.com\" rel=\"nofollow\">iOS</a>";
        text = "I am in Syria @(null) http://t.co/650E1WRY";
        truncated = 0;
        user =         {
            "contributors_enabled" = 0;
            "created_at" = "Sun May 01 15:20:52 +0000 2011";
            "default_profile" = 1;
            "default_profile_image" = 1;
            description = "<null>";
            "favourites_count" = 0;
            "follow_request_sent" = "<null>";
            "followers_count" = 0;
            following = "<null>";
            "friends_count" = 5;
            "geo_enabled" = 0;
            id = 291164338;
            "id_str" = 291164338;
            "is_translator" = 0;
            lang = en;
            "listed_count" = 0;
            location = "<null>";
            name = "Ashutosh Tiwari";
            notifications = "<null>";
            "profile_background_color" = C0DEED;
            "profile_background_image_url" = "http://a0.twimg.com/images/themes/theme1/bg.png";
            "profile_background_image_url_https" = "https://si0.twimg.com/images/themes/theme1/bg.png";
            "profile_background_tile" = 0;
            "profile_image_url" = "http://a2.twimg.com/sticky/default_profile_images/default_profile_3_normal.png";
            "profile_image_url_https" = "https://si0.twimg.com/sticky/default_profile_images/default_profile_3_normal.png";
            "profile_link_color" = 0084B4;
            "profile_sidebar_border_color" = C0DEED;
            "profile_sidebar_fill_color" = DDEEF6;
            "profile_text_color" = 333333;
            "profile_use_background_image" = 1;
            protected = 0;
            "screen_name" = ashu1702;
            "show_all_inline_media" = 0;
            "statuses_count" = 62;
            "time_zone" = "<null>";
            url = "<null>";
            "utc_offset" = "<null>";
            verified = 0;
        };
    }
)
在执行此操作时,我遇到以下错误:

2011-11-29 09:50:31.214 L'Occitane[1119:19d07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0
2011-11-29 09:50:31.215 L'Occitane[1119:19d07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0'
请帮忙


谢谢,

< p>当转换为可可基金会对象时,JSON分解成一组嵌套的<代码> NSrase>代码>和<代码> NSCORCHON/<代码> s,最终导致<代码> NSCONS/<代码> s,<代码> NSt/<代码> s和<代码> NSNull < /代码> s。理想情况下,您可以从web服务的文档向前工作,但也可以从根对象通过
NSLog
打印的描述向后工作

从您的日志中,我可以看到
expanded\u url
是一个未命名对象的成员,该对象是
媒体
数组中的第一个条目,该数组是
实体
对象的成员。包含
实体的未命名对象是数组的一部分,JSON反序列化程序将返回该数组。因此,您需要做一些类似的事情(如果以长格式写出来以供展示,并且没有任何验证):

其中的主要风险是,web服务可能会返回
媒体的空数组,导致
objectAtIndex:0
引发异常,或者它将返回数组以外的内容作为根对象,或者以其他方式调整行中的某个位置的类型。Objective-C关于消息传递的常规规则
nil
应该可以让您避免大多数字典问题。要应用多少验证是一个判断判断

2011-11-29 09:50:31.214 L'Occitane[1119:19d07] -[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0
2011-11-29 09:50:31.215 L'Occitane[1119:19d07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x85a50d0'
NSArray *result = [NSJSONSerialization ...

NSDictionary *firstObject = [result objectAtIndex:0];
NSDictionary *entities = [firstObject objectForKey:@"entities"];
NSArray *media = [entities objectForKey:@"media"];
NSDictionary *relevantObject = [media objectAtIndex:0];
NSString *expandedUrl = [relevantObject objectForKey:@"expanded_url"];