Комплексный JSON Response для iOS - PullRequest
1 голос
/ 13 декабря 2011

Я работаю с некоторой частью API Twitter и получаю ответ JSON с помощью ASIHTTPREQUEST. Ниже показано, как выглядит представление 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;
        };
    }
)

Мое беспокойство здесь заключается в том, что перед тем, как фактически установить все содержимое в модель данных, существует ли какой-либо конкретный способ установить параметры в пустую строку?

Как есть две сущности: "time_zone" = ""; и "utc_offset" = ""; Есть ли в любом случае перебрать ответ json и установить @ "" пустую строку. Я не хочу проверять функциональность NSNULL в каждой ключевой точке, и это может привести к тому, что у моего приложения в какой-то момент произойдет сбой некоторых петель, поэтому я просто хочу выяснить, как выполнить итерацию по такому сложному json, чтобы проверить каждую сущность и установите пустую строку для класса NSNull. Я пробовал рекурсивный способ, но он дает только список ключей верхнего уровня, а не сущностей в словаре.

Спасибо

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Значения "<null>" представляются символьными строками, а не NSNulls. Если вы хотите заменить строку символов на "", вы можете использовать stringByReplacingOccurrencesOfstring:withString: для их массового преобразования (как некоторый риск преобразования содержимого, которое вы не собираетесь).

(Но, чтобы быть уверенным, было бы хорошо, если бы вы представили некоторые необработанные JSON против Objective-C description объектов NSArray / NSDictionary, что, по-видимому, является тем, что вы показываете.)

1 голос
/ 13 декабря 2011

Нет, вам придется сделать это вручную.Тестирование против [NSNull null] - это путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...