-3

iOSでJSONを解析して、GoogleからURLを取得しようとしています。私はかなり遠くまで到達しました(以下のコードを参照)。問題は、これまでJSONを使用したことがないため、物事がどのように定義されているかがよくわからないことです。別のオブジェクトの中にあるオブジェクトを探すにはどうすればよいですか?

たとえば、unescapedUrl ここで最初のものを取得したい場合、どうすればそれを行うことができますか?objectForKeyを使ってみましたが、うまくいきませんでした。正確なパスを指定する必要があると思います。どうやってやるの?

これが私が使用しているコードです:

    #define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1
    #define kLatestSearchURL [NSURL URLWithString: @"https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=monkey"] //2

    #import "ViewController.h"

    @interface NSDictionary(JSONCategories)
    +(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress;
    -(NSData*)toJSON;
    @end

    @implementation NSDictionary(JSONCategories)
    +(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress
    {
        NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString: urlAddress] ];
        __autoreleasing NSError* error = nil;
        id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        if (error != nil) return nil;
        return result;
    }

    -(NSData*)toJSON
    {
        NSError* error = nil;
        id result = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:&error];
        if (error != nil) return nil;
        return result;
    }
    @end

    @implementation ViewController

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        dispatch_async(kBgQueue, ^{
            NSData* data = [NSData dataWithContentsOfURL: kLatestSearchURL];
            [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
        });
    }

    - (void)fetchedData:(NSData *)responseData {
        NSError* error;
        NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                             options:kNilOptions
                                                               error:&error];

// ---------------------------- Will Start Parsing Here ------------------------------
    }

    @end
4

2 に答える 2

6

神はリテラルを保存します(Xcode4.5およびiOS6.0以降のSDK、LLVMコンパイラ4.0が必要です)。iOS5にデプロイし直します。

NSString *url = resp[@"responseData"][@"results"][0][@"unescapedUrl"];
于 2013-02-10T12:19:57.237 に答える
2

objectForKey:辞書とobjectAtIndex:配列に使用できます。

NSString *url = [[[[resp objectForKey:@"responseData"]
                        objectForKey:@"results"]
                        objectAtIndex:0]
                        objectForKey:@"unescapedUrl"];
于 2013-02-10T12:16:35.523 に答える