开发笔记3-JSON数据的创建与读取

有了从网络获取数据的能力,今天就是练习一下网络传送的常见数据格式-JSON,当然XML是主流,但我自己比较喜欢JSON,而且大致看了一下XML的解析,objcec-c有专门的类做此工作,也就看看理论就罢了。今天的代码只练习JSON,今天的参考代码仍然是《iOS 5 Programming CookBook》作者Vandad Nahavandipoor。

首先复习下JSON的格式:整个数据是包装在{和}之间,内容是键:值对,键值对之间用“,”隔开,值也可以是数组,包装在[]之间,数据之间也是用“,”隔开,我曾经再学ExtJs的时候学习了下JSON,JSON还能组成比较复杂的数据结构,但不是今天关心的,今天主要是标准的JSON格式数据的封装与解析。

先来封装,一说键值对,在object-c语言中绝对是首先联想到NSDictionary类,如果是JAVA的话我想到的是Map,嘿嘿,好久没碰JAVA了,居然还是我大学的主修呢~~JSON数据之所以比XML好封装就是应为NSData类直接有方法将NSDictionary实例转换成JSON对象,前提是,特别重要,数据字典中的值必须是NSString实例或NSArray实例或NSNumber实例,NSArray我想就是对应JSON可以存储的数组对象,我想里面也必须是NSString和NSNumber实例吧~

贴封装代码:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    [dictionary setValue:@"Beleege" forKey:@"first name"];
    [dictionary setValue:@"Zhang" forKey:@"last name"];
    [dictionary setValue:[NSNumber numberWithUnsignedInt:23] forKey:@"age"];
    NSArray *array = [[NSArray alloc] initWithObjects:@"Wang Meng",
                      @"Bai Mo",
                      @"PP",nil];
    [dictionary setValue:array forKey:@"firends"];
    NSError *err = nil;
    
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&err];
    
    if (jsonData.length > 0 && err == nil) {
        NSLog(@"Success seralized dictionary into data.");
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        
        NSLog(@"json string = %@", jsonString);
    } else if (jsonData.length == 0 && err == nil) {
        NSLog(@"NO data returned after serialized");
    } else if (err != nil) {
        NSLog(@"An err happened = %@", err);
    }

预计结果如下:

2012-10-11 17:45:58.801 JSON_Practice[6111:c07] Success seralized dictionary into data.
2012-10-11 17:45:58.802 JSON_Practice[6111:c07] json string = {
  "age" : 23,
  "last name" : "Zhang",
  "firends" : [
    "Wang Meng",
    "Bai Mo",
    "PP"
  ],
  "first name" : "Beleege"
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值