• IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries


    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"

        );

  • 相关阅读:
    C#中的global::system***命名空间别名限定符
    返回一个整数数组中最大子数组的和
    敏捷开发概述
    单词查找排序输出
    关于电梯调度的设计
    关于电梯调度的一些想法
    C#中抽象类和接口的区别
    SharePoint2010列表表单:用后台代码生成表单
    外刊IT评论:远离.net
    程序员:编程给你现实生活带来了哪些坏习惯
  • 原文地址:https://www.cnblogs.com/Xer-Lee/p/3154847.html
Copyright © 2020-2023  润新知