Objective-C中的JSON解析

Nic*_*hem 1 iphone json objective-c ios

我在iOS中完成了关于JSON的Raywenderlich教程,但是我很难将它改编为我自己的JSON文件.这是我的JSON:

{
    "Albumvideo":[
    {
        "titre": "Publicité",
        "photo":"blabla.jpg"
    },
    {
        "titre": "Events",
        "photo":"blabla.jpg"
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

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

- (void)fetchedData:(NSData *)responseData {
     NSError* error;
     NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
     NSArray* albumsvideo = [json objectForKey:@"titre"];
     NSLog(@"Album: %@", albumsvideo);
}
Run Code Online (Sandbox Code Playgroud)

日志返回null.

Bha*_*vin 11

你做错了.您已json正确填写词典(已命名)中的JSON数据.但是你的Main中有一个Array of Dictionaries(被叫Albumvideo),Dictionary而且titreAlbumvideoArray 里面有值.

正确的代码是:

NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSArray* albumsvideo = [json objectForKey:@"Albumvideo"];
NSString *titre1 = [[albumsvideo objectAtIndex:0]valueForKey:@"titre"];
NSString *titre2 = [[albumsvideo objectAtIndex:1]valueForKey:@"titre"];
Run Code Online (Sandbox Code Playgroud)

理解概念.这取决于你的内心JSON.如果它是一个数组(里面的值[ ]),那么你必须保存NSArray,如果它是一个字典(里面的值{ })然后另存为NSDictionary,如果你有单个值,如字符串,整数,双,那么你必须使用适当的Objective-C数据保存它们类型.

希望你对JSON解析有一些正确的认识.

  • +1.优秀的解释,这是完全正确的(与其他人不同) (2认同)