JSON数据结构基本概念
JavaScript Object Notation ,轻量级的数据交换格式,采用完全独立于语言的文本格式,被称为理想的数据交换语言,易于人阅读和便携,同时也易于及其解析何程,由于JSON解析便捷、快速,并且相同数据用JSON编辑所占的内存更小,所以在iOS中我们我们使用JSON解析更加普遍。
JSON文档有两种结构:对象 、数据
对象:以“{“开始,以”}”结束,是“名称/值”对儿的集合。名称和值中间用“:”隔开。多个“名称/值”对之间用“,”隔开。类似OC中的字典。
数组:以“["开始,以“]”结束,中间是数据。数据以“,”分割。
JSON中的数据类型:字符串、数值、BOOL、对象、数组。
例如:
JSON – OC 转换对照表
JSON数据结构的功能
1、数据交换
2、内容管理
3、配置文件
JSON解析方案
在iOS中,JSON的常见解析方案有4种
第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
苹果原生(自带):NSJSONSerialization(性能最好)
NSJSONReadingOptions数组中含三种参数:
NSJSONReadingMutableContainers //是说被创建的数组或者字典应该是可变的
NSJSONReadingMutableLeaves
//是说JSON对象中的被创建的字符串是NSMutableString类型的
NSJSONReadingAllowFragments //这一句是说解析出的顶层对象可以允许不是NSArray或NSDictionary类型的
NSJSONWritingOptions 包含一种参数:
NSJSONWritingPrettyPrinted //意思是将生成的json数据格式化输出,这样可读性高,不设置则输出的json字符串就是一整行。
下面是NSJSONSerialization解析过程:
其他:
利用字典NSDictionary转换为键/值格式的数据。
- // 如果数组或者字典中存储了 NSString, NSNumber, NSArray, NSDictionary, or NSNull 之外的其他对象,就不能直接保存成文件了.也不能序列化成 JSON 数据.
- NSDictionary *dict = @{@"name" : @"me", @"do" : @"something", @"with" : @"her", @"address" : @"home"};
-
- // 1.判断当前对象是否能够转换成JSON数据.
- // YES if obj can be converted to JSON data, otherwise NO
- BOOL isYes = [NSJSONSerialization isValidJSONObject:dict];
-
- if (isYes) {
- NSLog(@"可以转换");
-
- /* JSON data for obj, or nil if an internal error occurs. The resulting data is a encoded in UTF-8.
- */
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
-
- /*
- Writes the bytes in the receiver to the file specified by a given path.
- YES if the operation succeeds, otherwise NO
- */
- // 将JSON数据写成文件
- // 文件添加后缀名: 告诉别人当前文件的类型.
- // 注意: AFN是通过文件类型来确定数据类型的!如果不添加类型,有可能识别不了! 自己最好添加文件类型.
- [jsonData writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/dict.json" atomically:YES];
-
- NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
-
- } else {
-
- NSLog(@"JSON数据生成失败,请检查数据格式");
-
- }
demo地址: iOS xml解析和json解析demo
-- NORMAL --