IOS開發之把 JSON 資料轉化成 Arrays 或者 Dictionaries

來源:互聯網
上載者:User

1 前言
通過 NSJSONSerialization 這個類的 JSONObjectWithData:options:error:方法來實現,把JSON 資料解析出來放在資料或者字典裡面儲存。


2 程式碼範例
TestDemo.m

 

[plain]
-(void)convseFromJson{ 
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
    [dictionary setValue:@"Anthony" forKey:@"First Name"]; 
    [dictionary setValue:@"Robbins" forKey:@"Last Name"]; 
    [dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"]; 
    NSArray *arrayOfAnthonysChildren = [[NSArray alloc] initWithObjects: 
                                        @"Anthony's Son 1", 
                                        @"Anthony's Daughter 1", 
                                        @"Anthony's Son 2", 
                                        @"Anthony's Son 3", 
                                        @"Anthony's Daughter 2", nil]; 
    [dictionary setValue:arrayOfAnthonysChildren forKey:@"children"]; 
    NSError *error = nil; 
    NSData *jsonData = [NSJSONSerialization 
                        dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; 
    if ([jsonData length] > 0 && error == nil){ 
        NSLog(@"Successfully serialized the dictionary into data."); 
        /* Json轉數組/字典 */ 
        error = nil; 
        //轉換方法 
        id jsonObject = [NSJSONSerialization 
                         JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments 
                         error:&error]; 
        if (jsonObject != nil && error == nil){ 
            NSLog(@"Successfully deserialized..."); 
            //如果jsonObject是字典類 
            if ([jsonObject isKindOfClass:[NSDictionary class]]){ 
                NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject; 
                NSLog(@"Dersialized JSON Dictionary = %@", deserializedDictionary); 
            } 
            //如果jsonObject是數組類 
            else if ([jsonObject isKindOfClass:[NSArray class]]){ 
                NSArray *deserializedArray = (NSArray *)jsonObject; 
                NSLog(@"Dersialized JSON Array = %@", deserializedArray); 
            } else { 
                NSLog(@"I can't deal with it"); 
            } 
        } 
        else if (error != nil){ 
            NSLog(@"An error happened while deserializing the JSON data."); } 
    } 
    else if ([jsonData length] == 0 &&error == nil){ 
        NSLog(@"No data was returned after serialization."); 
    } 
    else if (error != nil){ 
        NSLog(@"An error happened = %@", error); 
    } 

-(void)convseFromJson{
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    [dictionary setValue:@"Anthony" forKey:@"First Name"];
    [dictionary setValue:@"Robbins" forKey:@"Last Name"];
    [dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"];
    NSArray *arrayOfAnthonysChildren = [[NSArray alloc] initWithObjects:
                                        @"Anthony's Son 1",
                                        @"Anthony's Daughter 1",
                                        @"Anthony's Son 2",
                                        @"Anthony's Son 3",
                                        @"Anthony's Daughter 2", nil];
    [dictionary setValue:arrayOfAnthonysChildren forKey:@"children"];
    NSError *error = nil;
    NSData *jsonData = [NSJSONSerialization
                        dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
    if ([jsonData length] > 0 && error == nil){
        NSLog(@"Successfully serialized the dictionary into data.");
        /* Json轉數組/字典 */
        error = nil;
        //轉換方法
        id jsonObject = [NSJSONSerialization
                         JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments
                         error:&error];
        if (jsonObject != nil && error == nil){
            NSLog(@"Successfully deserialized...");
            //如果jsonObject是字典類
            if ([jsonObject isKindOfClass:[NSDictionary class]]){
                NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
                NSLog(@"Dersialized JSON Dictionary = %@", deserializedDictionary);
            }
            //如果jsonObject是數組類
            else if ([jsonObject isKindOfClass:[NSArray class]]){
                NSArray *deserializedArray = (NSArray *)jsonObject;
                NSLog(@"Dersialized JSON Array = %@", deserializedArray);
            } else {
                NSLog(@"I can't deal with it");
            }
        }
        else if (error != nil){
            NSLog(@"An error happened while deserializing the JSON data."); }
    }
    else if ([jsonData length] == 0 &&error == nil){
        NSLog(@"No data was returned after serialization.");
    }
    else if (error != nil){
        NSLog(@"An error happened = %@", error);
    }
}
控制台結果


2013-05-13 17:26:15.726 FromJsonTest[4944:303] Successfully serialized the dictionary into data.

2013-05-13 17:26:15.728 FromJsonTest[4944:303] Successfully deserialized...

2013-05-13 17:26:15.728 FromJsonTest[4944:303] Dersialized JSON Dictionary = {

    Age = 51;

    "First Name" = Anthony;

    "Last Name" = Robbins;

    children =     (

        "Anthony's Son 1",

        "Anthony's Daughter 1",

        "Anthony's Son 2",

        "Anthony's Son 3",

        "Anthony's Daughter 2"

    );

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.