• 【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
              },
          ...
          ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    解析JSON

    对于JSON解析,系统提供了一个类NSJSONSerialization
    在这里插入图片描述这两个方法用于实现JSON数据和对象之间的相互转换

    看一下NSData二进制流转对象方法中NSJSONReadingOptions
    请添加图片描述
    一般设置为0NSJSONReadingMutableContainers,接收一个可变字典即可

    简单示例
    如何

    如果有这样一个JSON数据:

    {"id":"777", "name":"Jacky", "age":19}
    
    • 1
        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);
            }
        }];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我们会建立相应的Object对象

    @interface TestObject : NSObject
    
    @property (nonatomic, copy)NSString* id;
    @property (nonatomic, copy)NSString* name;
    @property (nonatomic, assign)NSInteger age;
    
    @end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后进行赋值

    TestObject* testObject = [[TestObject alloc] init];
    testObject.id = dict[@"id"];
    testObject.name = dict[@"name"];
    testObject.age = [dict[@"age"] integerValue];
    
    • 1
    • 2
    • 3
    • 4

    总结

    本文主要展示了如何使用系统提供的函数将网络返回的二进制流转换成我们可读可理解的iOS中对应的对象

    JSON数据来源:知乎日报 API 分析

    实际上,JSON解析不仅有系统提供的类去实现,其实也有第三方库实现更加便利的解析过程,还能将解析后的数据转换成易于访问的格式并加以展示 JSON ——> @[ Model , Model ....] ,之后将学习JSONModel库的使用

  • 相关阅读:
    【云原生】配置Kubernetes CronJob自动备份Clickhouse数据库(单机版)
    [计算机网络安全实验] DNS攻击实验
    51单片机-第三节-LCD1602调试工具,矩阵键盘
    两种方法教你在postman设置请求里带动态token
    Google Earth Engine 教程——NDVI差异分析以及图像采集迭代分析
    2022高教社杯数学建模比赛论文资料1.0
    few shot learnning笔记
    大文件RandomAccessFile类来分片传输
    Redis单线程
    Windows 服务器中使用 mysqldump 命令导出数据,解决中文乱码问题
  • 原文地址:https://blog.csdn.net/XY_Mckevince/article/details/133961261