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"

    }

  • 相关阅读:
    上手 WebRTC DTLS 遇到很多 BUG?浅谈 DTLS Fragment
    亮相 LiveVideoStackCon,透析阿里云窄带高清的现在与未来
    会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准
    如何用 Electron + WebRTC 开发一个跨平台的视频会议应用
    理论 + 标准 + 工程 —— 阿里云视频云编码优化的思考与发现
    遍历哈希表
    sql语句的循环执行
    一个aspx页面里所有的控件
    SELECT DISTINCT 语句
    100 The 3n + 1 problem
  • 原文地址:https://www.cnblogs.com/Xer-Lee/p/3154849.html
Copyright © 2011-2022 走看看