zoukankan      html  css  js  c++  java
  • IOS开发之把 Array 和 Dictionaries 序列化成 JSON 对象

    1 前言
    通过 NSJSONSerialization 这个类的 dataWithJSONObject:options:error:方法来实现,Array 和 dictionary 序列化成 JSON 对象。方便在网络中传输。


    2 代码实例
    TestDemo.m

    [plain]
    (void)converseToJson{ 
        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
        [dictionary setValue:@"Archy" forKey:@"First Name"]; 
        [dictionary setValue:@"Robbins" forKey:@"Last Name"]; 
        [dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"]; 
        NSArray *arrayOfArchysChildren = [[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:arrayOfArchysChildren forKey:@"children"]; 
        NSError *error = nil; 
        //NSJSONWritingPrettyPrinted:指定生成的JSON数据应使用空格旨在使输出更加可读。如果这个选项是没有设置,最紧凑的可能生成JSON表示。 
        NSData *jsonData = [NSJSONSerialization 
                            dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; 
        if ([jsonData length] > 0 && error == nil){ 
            NSLog(@"Successfully serialized the dictionary into data."); 
            //NSData转换为String 
            NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
            NSLog(@"JSON String = %@", jsonString); 
        } 
        else if ([jsonData length] == 0 && 
                 error == nil){ 
            NSLog(@"No data was returned after serialization."); 
        } 
        else if (error != nil){ 
            NSLog(@"An error happened = %@", error); 
        } 
         

    -(void)converseToJson{
        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
        [dictionary setValue:@"Archy" forKey:@"First Name"];
        [dictionary setValue:@"Robbins" forKey:@"Last Name"];
        [dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"];
        NSArray *arrayOfArchysChildren = [[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:arrayOfArchysChildren forKey:@"children"];
        NSError *error = nil;
        //NSJSONWritingPrettyPrinted:指定生成的JSON数据应使用空格旨在使输出更加可读。如果这个选项是没有设置,最紧凑的可能生成JSON表示。
        NSData *jsonData = [NSJSONSerialization
                            dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
        if ([jsonData length] > 0 && error == nil){
            NSLog(@"Successfully serialized the dictionary into data.");
            //NSData转换为String
            NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
            NSLog(@"JSON String = %@", jsonString);
        }
        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:14:26.087 ToJsonTest[4890:303] Successfully serialized the dictionary into data.

    2013-05-13 17:14:26.089 ToJsonTest[4890:303] JSON String = {

      "children" : [

        "Anthony's Son 1",

        "Anthony's Daughter 1",

        "Anthony's Son 2",

        "Anthony's Son 3",

        "Anthony's Daughter 2"

      ],

      "Age" : 51,

      "First Name" : "Archy",

      "Last Name" : "Robbins"

    }

  • 相关阅读:
    Vue学习(十七)修饰符
    组件学习(一)开发组件前必读
    vue学习(十六)“就地更新”策略
    nrm学习(一)
    帧动画的多种实现方式与性能对比
    JavaScript中的二进制对象
    生成式模型与判别式模型
    堡垒机
    vue生产环境nginx配置代理转发跨域
    Ceph nautilus 集群部署
  • 原文地址:https://www.cnblogs.com/Xer-Lee/p/3154849.html
Copyright © 2011-2022 走看看