-1

JSONを解析する方法を学んでいます。raywenderlich チュートリアルを作成しましたが、まだいくつかの手順で迷っています。私は自分のJSONを手に入れました:

{
    "Albumvideo":{
        "album01":{
            "titreAlbum":"Publicité",
            "photoAlbum":"blabla.jpg",
            "pubVideos":{
                "pub01":[
                {
                "titrePub":"Chauffage Compris",
                "dureePub":"01'25''",
                "photoPub":"chauffage.jpg",
                "lienPub":"http://www.wmstudio.ch/videos/chauffage.mp4"
                }
                ]
            }
        },
        "album02":{
            "titreAlbum":"Events",
            "photoAlbum":"bloublou.jpg",
            "eventsVideos":{
                "event01":[
                {
                "titreEvent":"Chauffage Compris",
                "dureeEvent":"01'25''",
                "photoEvent":"chauffage.jpg",
                "lienEvent":"http://www.wmstudio.ch/videos/chauffage.mp4"
                }
                ]
            }
        }
    }
}

JSONを解析するための「コード」を取得しました:

- (void) viewDidLoad
{
    [super viewDidLoad];

    dispatch_async (kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:lienAlbumsVideo];
        [self performSelectorOnMainThread:@selector(fetchedData:)withObject:data waitUntilDone:YES];
    });
}
- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSArray* albumsVideo = [json objectForKey:@"Albumvideo"];

    NSLog(@"Nombre d'albums : %i",[albumsVideo count]);

}

これは正常に動作し、私の NSLog は「2」を返します。たとえば、「titreAlbum」または「event01」で配列を作成するのが難しいところです。私が行った場合 :

NSArray* event01 = [json objectForKey:@"event01"];
NSLog(@"Number of objects in event01 : %i ", [event01 count]);

私の NSLog は「0」を返します。

JSON の多次元配列から情報を解析する方法がよくわかりませんでした。もうありがとう!

ニコラス

4

3 に答える 3

1

Some things, every time you see

{ ... }

in the json that is the beginning/end of an NSDictionary

once parsed, while

[ ... ]

is the beginning end of an NSArray.

So once you parse the json using NSJSONSerialization you can navigate that dictionary using that knowledge.

Given the json you have to get an array of "titreAlbum" you would have to do something like:

NSDictionary *albumVideo = json[@"Albumvideo"];
NSMutableArray *albumTitres = [[NSMutableArray alloc] init];
for (NSDictionary *album in albumVideo) {
    [albumTitres addObject:album[@"titreAlbum"]];
}

That said, I think your json is not malformed as is passing the JSONLint validation, but is not helping you to parse it. I would expect that the Albumvideo is an array of albums, instead of a dictionary of albums.

于 2013-06-14T07:56:15.923 に答える