JSON在Web开发和网络通信和传输中广泛应用,常用于存储和传输数据,这些数据一般也都是JSON格式,可以说绝大多数网络请求传输的数据都是JSON格式
在之前有关网络请求文章中,实现了网络数据加载流程,并对加载下来的JSON数据通过NSJSONSerialization
类方法,进行了简单的解析
本篇文章我们详细分析一下这个类方法如何处理我们请求下来的数据,并将这些数据合理地、规范地使用和存储
认识JSON
将这段URLhttps://news-at.zhihu.com/api/4/story/8997528/long-comments
输入到浏览器后可以看到返回的就是字符串:
JSON就是一段纯文本的数据字符串,可对象化的结构(字典、数组、字符串、数字等数据类型),具有简洁、易读的特点,这是一个JSON数据:
{
date: "20140523",
stories: [
{
title: "中国古代家具发展到今天有两个高峰,一个两宋一个明末(多图)",
ga_prefix: "052321",
images: [
"http://p1.zhimg.com/45/b9/45b9f057fc1957ed2c946814342c0f02.jpg"
],
type: 0,
id: 3930445
},
...
],
top_stories: [
{
title: "商场和很多人家里,竹制家具越来越多(多图)",
image: "http://p2.zhimg.com/9a/15/9a1570bb9e5fa53ae9fb9269a56ee019.jpg",
ga_prefix: "052315",
type: 0,
id: 3930883
},
...
]
解析JSON
对于JSON解析,系统提供了一个类NSJSONSerialization
:
这两个方法用于实现JSON数据和对象之间的相互转换
看一下NSData二进制流转对象方法中NSJSONReadingOptions
:
一般设置为0
或NSJSONReadingMutableContainers
,接收一个可变字典即可
简单示例
如何
如果有这样一个JSON数据:
{"id":"777", "name":"Jacky", "age":19}
NSURLSessionTask* task = [session dataTaskWithURL: url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
//解析数据
self.dict = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &error];
//NSLog(@"%@", data);
} else {
NSLog(@"请求出现错误:%@", error);
}
}];
我们会建立相应的Object对象
@interface TestObject : NSObject
@property (nonatomic, copy)NSString* id;
@property (nonatomic, copy)NSString* name;
@property (nonatomic, assign)NSInteger age;
@end
然后进行赋值
TestObject* testObject = [[TestObject alloc] init];
testObject.id = dict[@"id"];
testObject.name = dict[@"name"];
testObject.age = [dict[@"age"] integerValue];
总结
本文主要展示了如何使用系统提供的函数将网络返回的二进制流转换成我们可读可理解的iOS中对应的对象
JSON数据来源:知乎日报 API 分析
实际上,JSON解析不仅有系统提供的类去实现,其实也有第三方库实现更加便利的解析过程,还能将解析后的数据转换成易于访问的格式并加以展示 JSON ——> @[ Model , Model ....]
,之后将学习JSONModel库的使用