谈谈iOS开发之JSON格式数据的生成与解析

iOS开发中的JSON数据

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在iOS开发中常用于前后端交互、接口请求等方面。在iOS开发中,我们可以使用系统提供的NSJSONSerialization类实现对JSON格式数据的生成和解析。

JSON数据的生成

我们可以使用Foundation框架中的NSJSONSerialization类生成JSON格式数据。生成JSON格式数据的方法是将需要序列化(序列化即将内容组成一个串作为输出)的OC对象序列化为NSData对象。

具体实现如下:

NSError *error = nil;
NSDictionary *dict = @{@"name": @"Tom", @"age": @18, @"city": @"Beijing"};
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

以上代码将一个NSDictionary对象序列化成了一个JSON格式的NSData对象,并将NSData对象转成了NSString对象,最终得到了一个JSON格式的字符串。其中,NSDictionary对象表示生成JSON格式数据的源数据,options参数用于设置生成JSON格式数据时的选项,error参数用于存储序列化错误时的信息。

JSON数据的解析

我们可以使用Foundation框架中的NSJSONSerialization类解析JSON格式数据。解析JSON格式数据的方法是将JSON格式数据转化为OC对象。

具体实现如下:

NSError *error = nil;
NSString *jsonString = @"{\"name\":\"Tom\",\"age\":18,\"city\":\"Beijing\"}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id object = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if ([object isKindOfClass:[NSDictionary class]]) {
    NSDictionary *resultDic = (NSDictionary *)object;
    NSLog(@"name:%@\n age:%@\n city:%@", resultDic[@"name"], resultDic[@"age"], resultDic[@"city"]);
}

以上代码将一个JSON格式的字符串解析成了一个NSDictionary对象,最后打印出了NSDictionary对象中的内容。其中,jsonData表示需要解析的JSON格式数据,options参数用于设置解析JSON格式数据时的选项,error参数用于存储序列化错误时的信息。

示例1

假设我们需要生成一个包含学生姓名、年龄、籍贯、爱好的JSON格式数据。具体代码如下:

NSError *error = nil;
NSDictionary *stuDict = @{@"name": @"Mike", @"age": @20, @"hometown": @"Shanghai", @"hobby":@[@"reading", @"swimming", @"music"]};
NSData *data = [NSJSONSerialization dataWithJSONObject:stuDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

以上代码将一个NSDictionary对象序列化成了一个JSON格式的NSData对象,并将NSData对象转成了NSString对象,最终得到了一个JSON格式的字符串。其中,stuDict是学生信息的字典对象。

示例2

假设我们需要解析服务器返回的JSON格式数据,并在应用中展示。服务器返回的JSON格式数据如下:

{
    "code": 200,
    "message": "OK",
    "data": {
        "totalCount": 100,
        "resultList": [{
            "name": "Tom",
            "age": 18,
            "city": "Beijing"
        },
        {
            "name": "Mike",
            "age": 20,
            "city": "Shanghai"
        }]
    }
}

我们需要解析服务器返回的JSON格式数据,并展示到应用界面上。具体代码如下:

NSError *error = nil;
NSString *jsonString = @"{\"code\":200,\"message\":\"OK\",\"data\":{\"totalCount\":100,\"resultList\":[{\"name\":\"Tom\",\"age\":18,\"city\":\"Beijing\"},{\"name\":\"Mike\",\"age\":20,\"city\":\"Shanghai\"}]}}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id object = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if ([object isKindOfClass:[NSDictionary class]]) {
    NSDictionary *resultDict = (NSDictionary *)object;
    NSArray *resultList = resultDict[@"data"][@"resultList"];
    NSLog(@"totalCount:%@", resultDict[@"data"][@"totalCount"]);
    for (NSDictionary *dict in resultList) {
        NSLog(@"name:%@\n age:%@\n city:%@", dict[@"name"], dict[@"age"], dict[@"city"]);
    }
}

以上代码将一个JSON格式的字符串解析成了一个NSDictionary对象,并打印出了NSDictionary对象中的内容。其中,jsonString表示需要解析的JSON格式数据。resultList是一个数组,里面包含多个字典对象,每个字典对象表示一条信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:谈谈iOS开发之JSON格式数据的生成与解析 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++11 并发指南之std::mutex详解

    C++11 并发指南之std::mutex详解 什么是std::mutex? std::mutex是C++11标准中一个用于保护共享数据的同步原语。它是一个轻量级的锁,可以用于实现临界段或者锁保护的互斥访问。当一个线程执行到std::mutex的lock()方法时,如果此前该锁已经被另一个线程占用,那么该线程会被挂起,直到该锁被释放为止。 std::mute…

    C 2023年5月22日
    00
  • JSON格式化输出

    当我们需要在网站上展示来自后台的数据时,通常需要一个格式化输出的工具来把数据呈现出来,这个工具就是JSON格式化输出。 以下是JSON格式化输出的完整攻略: 什么是JSON格式化输出? JSON格式化输出是一种将JSON数据按照一定的格式展示的方式。它可以将行尾的分隔符、空格和换行符都进行格式化,使得数据更加整洁、易读。 如何进行JSON格式化输出? JSO…

    C 2023年5月23日
    00
  • C语言开发实现通讯录管理系统

    C语言开发实现通讯录管理系统 简介 本文将详细讲解如何使用C语言开发实现一套通讯录管理系统。通讯录管理系统可以帮助用户记录联系人信息,并可以通过一些代码进行添加、删除、修改、查询等操作。 技术方案 使用C语言实现通讯录管理系统,需要掌握以下技术: 结构体:用于定义联系人结构体,包含联系人姓名、电话等信息。 指针:用于对结构体地址进行操作。 动态内存分配:用于…

    C 2023年5月23日
    00
  • 详解ubuntu安装opencv的正确方法

    详解Ubuntu安装OpenCV的正确方法 OpenCV是一个非常流行的开源计算机视觉库,它能够处理各种图像和视频处理任务。本文将详细介绍Ubuntu系统中安装OpenCV的正确方法。 步骤1:更新系统软件包 在安装OpenCV之前,我们需要确保系统中的软件包是最新的。为此,我们可以使用以下命令更新软件包: sudo apt update sudo apt …

    C 2023年5月22日
    00
  • 基于C++和MFC开发象棋程序

    首先我将整个攻略分为四个步骤:设计需求、编写程序、测试调试、部署发布,下面我将详细讲解每一步骤。 1. 设计需求 在设计象棋程序时,先要明确需求和目标,需要考虑的基本功能包括:棋盘、棋子、走法、算法、界面等。根据需求,我们可以开始设计程序的结构和框架。 以下是一些示例说明: 示例1:棋子类设计 棋子类应该包括棋子的类型、颜色、当前位置等属性,以及移动方法、判…

    C 2023年5月23日
    00
  • Win7旗舰版系统开机提示netsh.exe应用程序错误代码0xc0000142的原因及解决方法

    Win7旗舰版系统开机提示netsh.exe应用程序错误代码0xc0000142的原因及解决方法 如果您使用Windows 7旗舰版系统时,在开机时出现了“netsh.exe应用程序错误代码0xc0000142”的提示,那么很可能是因为系统中的某些文件已经损坏或丢失,或者是因为病毒感染导致系统出现异常。 原因分析 系统文件损坏或丢失:netsh.exe 是W…

    C 2023年5月24日
    00
  • 基于matlab MFCC+GMM的安全事件声学检测系统

    让我来详细讲解“基于matlab MFCC+GMM的安全事件声学检测系统”的完整攻略。 系统描述 这是一个基于matlab MFCC+GMM的安全事件声学检测系统,用于监听环境中的声音信号并根据特征对其进行分类,以检测是否存在安全事件。系统主要包含以下三个模块: 数据预处理模块:对原始音频进行文件读取、降噪、滤波、抽取特征等预处理 特征提取模块:使用MFCC…

    C 2023年5月24日
    00
  • C++实现LeetCode(188.买卖股票的最佳时间之四)

    C++实现LeetCode(188.买卖股票的最佳时间之四)攻略 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。 注意: 你不能同时参与多笔交易(即,你必须在再次购买前出售掉之前的股票)。 示例1: 输入:k = 2, p…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部