3

Twitter APIが受け取ったJSON文字列を解析して、ユーザーのタイムラインを取得しようとしています。Jastorを使用してJSON応答をObjectiveCオブジェクトに変換しています。エンティティオブジェクトを解析しようとするまで、すべて正常に機能します

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" = ();
    };

JSONが標準ではない場合でも、Jastorはすべてを解析しているように見えますが、 "(" ")"が存在するためにこのブロックが解析されます。Jastorがこのブロックも解析できるようにする方法を知っていますか?または、ライブラリを変更する必要がありますか?

ありがとうございました。

4

2 に答える 2

8

質問の出力で不思議なのは、それがJSON形式の文字列ではないということです。これは、JSON文字列をObjective-Cオブジェクトに変換するときに一般的なオブジェクトNSDictionaryとオブジェクトのネストされた組み合わせのように見えます。この種のオブジェクトの場合、中括弧はオブジェクトを示しNSArray、括弧はオブジェクトを示します。NSLogNSDictionaryNSArray

つまり、典型的な、正常に解析されたJSONオブジェクトを表示しているように見えます。上記の出力が、たとえば:と呼ばれるNSLogいくつかのを実行することによって生成されたと仮定すると、次のように解読できます。NSDictionaryjsonObject

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];

または、最新の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];

于 2012-11-21T13:12:45.257 に答える
1

iOS 5.0 NSJSONSerializationの新機能を使用しないのはなぜですか。それは、JSONデータをNSArrayやNSDictionaryなどのObjectiveC標準に変換します。

NSString *stringURL = [NSString stringWithFormat:@"%@?%@", kTwitterApi, kParams];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringURL]];
request.HTTPMethod = @"GET";

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (error) {
        NSLog(@"Error%@", error.localizedDescription);
    }else {
        NSError *err;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&err];

        NSLog(@"%@", json);
    }

}];
于 2012-11-21T12:43:50.583 に答える