将单个数组对象分解为许多对象

时间:2016-02-29 01:35:38

标签: objective-c nsarray

如果这是一个新手问题,请道歉,但我一直在努力想象这一点,没有运气。我正在尝试使用AFOAuth2Manager框架来提取用户的Twitter时间线。一切都有意义,除了返回的JSON对象是一个数组,整个对象是一个巨大的对象。我显然想把它分解成不同的元素并将它们存储在字典中,但到目前为止还没有弄明白。

这是数组对象外观的非常局部的例子。完整的对象是大约20个左右的推文,附加了这种格式。如果需要,我会发布整个json对象,但发布整个内容似乎毫无意义。

继承我的代码:

[manager GET:@"/1.1/statuses/user_timeline.json?screen_name=jack"
      parameters:nil
         success:^(AFHTTPRequestOperation *operation, id responseObject ) {

             self.object = responseObject;
             NSLog(@"Success: %@", responseObject);

             if ([responseObject isKindOfClass:[NSArray class]]) {
                 NSLog(@"object is a nsarray class");
             } else if ([responseObject isKindOfClass:[NSDictionary class]]){
                 NSLog(@"object is a nsdictionary class");
             } else {
                 NSLog(@"object is a different class");
             }

             NSArray *response = [NSArray arrayWithObject:responseObject];

             NSLog(@"count %ld", [response count]);

             NSData *dataFromTwitter = [NSKeyedArchiver archivedDataWithRootObject:self.object];

             NSError *parseError = nil;
             NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:dataFromTwitter
                                                                          options:NSJSONReadingMutableLeaves | NSJSONReadingMutableContainers|NSJSONReadingAllowFragments
                                                                            error:&parseError];

             NSLog(@"response Dict: %@", responseDict);




             NSError *e = nil;
             NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:dataFromTwitter
                                                                  options:NSJSONReadingAllowFragments
                                                                    error:&e];

             NSLog(@"jsonArray: %@", jsonArray);

             NSError *jsonError2 = nil;

             id jsonObject = [NSJSONSerialization JSONObjectWithData:dataFromTwitter
                                                             options:NSJSONReadingAllowFragments
                                                               error:&jsonError2];



             if ([jsonObject isKindOfClass:[NSArray class]]) {
                 NSLog(@"its an array!");
                 NSArray *jsonArray = (NSArray *)jsonObject;
                 NSLog(@"jsonArray2 - %@",jsonArray);
             }
             else {
                 NSLog(@"its probably a dictionary");
                 NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
                 NSLog(@"jsonDictionary - %@",jsonDictionary);
                 NSLog(@"error %@", jsonError2);
             }



         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             NSLog(@"Failure: %@", error);
         }];





{
    contributors = "<null>";
    coordinates = "<null>";
    "created_at" = "Mon Feb 29 01:18:05 +0000 2016";
    entities =         {
        hashtags =             (
        );
        symbols =             (
        );
        urls =             (
        );
        "user_mentions" =             (
                            {
                id = 14616957;
                "id_str" = 14616957;
                indices =                     (
                    0,
                    7
                );
                name = "Jason Del Rey";
                "screen_name" = DelRey;
            },
                            {
                id = 19040598;
                "id_str" = 19040598;
                indices =                     (
                    8,
                    18
                );
                name = "\U0ca0_\U0ca0";
                "screen_name" = MikeIsaac;
            },
                            {
                id = 46063;
                "id_str" = 46063;
                indices =                     (
                    19,
                    30
                );
                name = "Hunter Walk";
                "screen_name" = hunterwalk;
            }
        );
    };
    "favorite_count" = 12;
    favorited = 0;
    geo = "<null>";
    id = 704113377920978944;
    "id_str" = 704113377920978944;
    "in_reply_to_screen_name" = DelRey;
    "in_reply_to_status_id" = 704112911116013568;
    "in_reply_to_status_id_str" = 704112911116013568;
    "in_reply_to_user_id" = 14616957;
    "in_reply_to_user_id_str" = 14616957;
    "is_quote_status" = 0;
    lang = en;
    place = "<null>";
    "retweet_count" = 0;
    retweeted = 0;
    source = "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>";
    text = "@DelRey @MikeIsaac @hunterwalk this changes everything";
    truncated = 0;
    user =         {
        "contributors_enabled" = 0;
        "created_at" = "Tue Mar 21 20:50:14 +0000 2006";
        "default_profile" = 0;
        "default_profile_image" = 0;
        description = "#withMalala!";
        entities =             {
            description =                 {
                urls =                     (
                );
            };
        };
        "favourites_count" = 11433;
        "follow_request_sent" = "<null>";
        "followers_count" = 3458722;
        following = "<null>";
        "friends_count" = 1859;
        "geo_enabled" = 1;
        "has_extended_profile" = 1;
        id = 12;
        "id_str" = 12;
        "is_translation_enabled" = 0;
        "is_translator" = 0;
        lang = en;
        "listed_count" = 25944;
        location = "California, USA";
        name = Jack;
        notifications = "<null>";
        "profile_background_color" = EBEBEB;
        "profile_background_image_url" = "http://abs.twimg.com/images/themes/theme7/bg.gif";
        "profile_background_image_url_https" = "https://abs.twimg.com/images/themes/theme7/bg.gif";
        "profile_background_tile" = 0;
        "profile_image_url" = "http://pbs.twimg.com/profile_images/668328458519384064/FSAIjKRl_normal.jpg";
        "profile_image_url_https" = "https://pbs.twimg.com/profile_images/668328458519384064/FSAIjKRl_normal.jpg";
        "profile_link_color" = 990000;
        "profile_sidebar_border_color" = DFDFDF;
        "profile_sidebar_fill_color" = F3F3F3;
        "profile_text_color" = 333333;
        "profile_use_background_image" = 1;
        protected = 0;
        "screen_name" = jack;
        "statuses_count" = 19066;
        "time_zone" = "Pacific Time (US & Canada)";
        url = "<null>";
        "utc_offset" = "-28800";
        verified = 1;
    };
},

1 个答案:

答案 0 :(得分:0)

您在问题中没有显示任何代码,在评论中,您声明自己有responseObject,但不知道您是怎么来的。

您从某处获得的JSON将是文本,您可以将其作为NSStringNSDataNSArray,其元素是这些等等。

您需要获取该文本然后将其解析为JSON,NSJSONSerialization类将为您处理解析,其描述的第一行说明:

  

使用NSJSONSerialization类将JSON转换为Foundation对象并将Foundation对象转换为JSON。

一旦你拥有了这些Foundation对象 - 数组,字典,字符串,数字等,你就可以提取你感兴趣的字段。

如果您已经编写了一些代码来执行此操作,如果它无法正常工作并且您遇到困难,请提出一个显示您的代码的新问题,并且有人可能会帮助您进一步帮助您。

HTH