json解包与json封包
首先,对两个名词进行简单的说明:
1.NSData
用来存储二进制的数据类型。NSData类提供了一种简单的方式,它用来设置缓冲区、将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。不变缓冲区(NSData类),也可定义可变的缓冲区(NSMutableData类)。
2.json
作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式。
小结:我们只需要明白NSData类型是用来存储二进制数据的,json是一种数据格式,注意是格式。
接着,先用一段文字简单描述一下json解包和json封包:
iOS5.0以后,苹果SDK推出了自带的json解决方案NSJSONSerialization,这是一个非常好用的json生成和解析工具,效率也是比其他第三方开源项目的高很多。NSJSONSerialization提供了json数据封包、Json数据解包。NSJSONSerialization提供了将json数据转换为NSDictionary或NSArray的解包方法,也提供了将NSDictionary、NSArray对象转换为json数据(可以通过调用isValidJSONObject来判断NSDictionary、NSArray对象是否可以转换为json数据)的封包方法。
然后,用一张图试着说明两件事。其一是,利用NSJSONSerialization将一个json文件解包成数组或者字典。其二是,利用NSJSONSerialization将数组或者字典封包成一个json文件。
最后还是上代码与效果图:
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 4 NSLog(@"*******开始封包********"); 5 [self fengbao]; 6 NSLog(@"*******开始解包********"); 7 [self jiebao]; 8 } 9 10 - (void)jiebao 11 { 12 NSString *filePath = @"/Users/Hers/Desktop/UIimageView简单测试/UIimageView简单测试/jsonDate.json"; 13 NSData *jsonData = [NSData dataWithContentsOfFile:filePath]; 14 NSError *error; 15 NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options: NSJSONReadingMutableContainers error:&error]; 16 NSLog(@"%@",jsonDict); 17 } 18 19 - (void)fengbao 20 { 21 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil]; 22 // isValidJSONObject判断对象是否可以构建成json对象 23 if ([NSJSONSerialization isValidJSONObject:dic]){ 24 NSError *error; 25 // 创造一个json从Data, NSJSONWritingPrettyPrinted指定的JSON数据产的空白,使输出更具可读性。 26 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error]; 27 NSLog(@"jsonData:%@",jsonData); 28 29 NSString *jsonStr =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 30 NSLog(@"jsonStr:%@",jsonStr); 31 32 BOOL result = [jsonData writeToFile:@"/Users/Hers/Desktop/UIimageView简单测试/UIimageView简单测试/jsonDate.json" atomically:YES]; 33 NSLog(@"result:%d",result); 34 } 35 }
输出日志:
封包操作后产生的文件:
【极力推荐】2018年中秋节两天的良心写作,全面讲解UITextField,总有你不知道的知识:UITextField的使用、介绍、讲解、全解、简介、说明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了