【iOS】JSON解析

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
请添加图片描述
一般设置为0NSJSONReadingMutableContainers,接收一个可变字典即可

简单示例
如何

如果有这样一个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库的使用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值