ios Twitter API JSON解析

lon*_*tra 3 twitter json ios

我正在尝试解析Twitter API收到的JSON字符串以获取用户时间线.我正在使用Jastor将JSON响应转换为目标c对象.一切正常,直到我尝试解析实体对象

entities = {
        hashtags =();
        media = (
                 {
                "display_url" = "pic.twitter.com/...";
                "expanded_url" = "http://...";
                id = ...;
                "id_str" = ...;
                indices =(
                    5,
                    25
                );
                "media_url" = "http://...";
                "media_url_https" = "https://...";
                sizes ={
                    large ={
                        h = 765;
                        resize = fit;
                        w = 1024;
                    };
                    medium ={
                        h = 448;
                        resize = fit;
                        w = 600;
                    };
                    small ={
                        h = 254;
                        resize = fit;
                        w = 340;
                    };
                    thumb ={
                        h = 150;
                        resize = crop;
                        w = 150;
                    };
                };
                type = photo;
                url = "http://...";
            }
        );
        urls =();
        "user_mentions" = ();
    };
Run Code Online (Sandbox Code Playgroud)

即使JSON不是标准的,Jastor似乎也解析了所有这些,但由于"("")"的存在,这个块.你知道如何让Jastor解析这个块吗?或者我是否需要更换库?

谢谢.

Rob*_*Rob 8

对你的问题的输出感到好奇的是它不是JSON格式的字符串.它看起来像是嵌套的NSDictionaryNSArray对象的组合,当您将JSON字符串转换为Objective-C对象时,这是典型的.当您使用NSLog此类对象时,花括号表示NSDictionary对象,括号表示NSArray对象.

所以,它看起来就像你正在显示一个典型的,成功解析的JSON对象.您可以如下解释它,假设上面的输出是通过执行NSLog一些NSDictionary调用生成的,比如说jsonObject:

NSDictionary *entity  = [jsonObject objectForKey:@"entities"];
NSArray *media        = [entity objectForKey:@"media"];
NSDictionary *media0  = [media objectAtIndex:0];
NSString *display_url = [media0 objectForKey:@"display_url"];
NSArray *sizes        = [media0 objectForKey:@"sizes"];
NSDictionary *size0   = [sizes objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

或者,如果使用现代Objective C,只需:

NSDictionary *entity  = jsonObject[@"entities"];
NSArray *media        = entity[@"media"];
NSDictionary *media0  = media[0];
NSString *display_url = media0[@"display_url"];
NSArray *sizes        = media0[@"sizes"];
NSDictionary *size0   = sizes[0];
Run Code Online (Sandbox Code Playgroud)

等等