相关文章:《iOS开发指南-XML篇》
一.JSON文档结构
1. 关于JSON
(1)JSON是什么?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.
(2)JSON与XML比较
与XML相比,描述相同数据JSON所需的字符个数要少,所以传输速度就会更高,流量更少.
(3)JSON更适合iOS移动开发
- 由于Web和移动平台开发的要求是流量尽可能少,速度尽可能快,而轻量级的JSON相对于其他数据交换格式更符合要求.
- 构成JSON的两种结构,为字典和数组.刚好可以用
NSDictionary
和NSArray
去接收数据,使用更方便.
2.JSON示例
最近在研究黄金,所以刚好,以聚合数据所提供的免费黄金数据数据接口作为示例,请求一个JSON格式的数据.
使用前注册好账号,并进行了实名验证,然后申请黄金数据API资格,会获取一个AppKey
我们参照请求示例使用Postman工具发送Get请求
获得的JSON数据如下,为字典结构的JSON(作为讲解,3以后的相同格式的数据以…代替)
{
"resultcode": "200",
"reason": "SUCCESSED!",
"result": [
{
"1": {
"variety": "Au100g",
"latestpri": "286.02",
"openpri": "288.00",
"maxpri": "289.00",
"minpri": "286.02",
"limit": "-0.38%",
"yespri": "287.12",
"totalvol": "440.00",
"time": "2016-07-20 15:27:54"
},
"2": {
"variety": "Au(T+N1)",
"latestpri": "288.50",
"openpri": "288.65",
"maxpri": "290.50",
"minpri": "287.05",
"limit": "-0.47%",
"yespri": "289.85",
"totalvol": "80304.00",
"time": "2016-07-20 15:29:55"
},
"3": {
"variety": "Au(T+D)",
"latestpri": "285.71",
"openpri": "287.44",
"maxpri": "287.70",
"minpri": "285.31",
"limit": "-0.38%",
"yespri": "286.79",
"totalvol": "64330.00",
"time": "2016-07-20 15:30:00"
},
...
}
],
"error_code": 0
}
3.JSON结构讲解
二.JSON文件解析
(1)解析步骤
①首先调用NSString的
//将文件读取成字符串
+ (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
②然后调用NSString的
//将字符串转成二进制数据NSData
- (nullable NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
③最后调用系统类NSJSONSerialization的
//进行解析,解析成NSArray或NADictioanry
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
(2)程序举例
NSString *pathDesktop = @"/Users/mac/Desktop";
//1.读取json文件中的信息
NSString *string = [NSString stringWithContentsOfFile:[pathDesktop stringByAppendingString:@"/json/jsonUserList.txt"] encoding:NSUTF8StringEncoding error:nil];
//2.将string转换成data
NSData *dataFromString = [string dataUsingEncoding:NSUTF8StringEncoding];
//3.json解析
NSDictionary *dictionaryFromFile = [NSJSONSerialization JSONObjectWithData:dataFromString options:NSJSONReadingMutableContainers error:nil];