ios基础篇(二十七)——json解析

yizhihongxing

以下是关于“iOS基础篇(二十七)——JSON解析”的完整攻略:

什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式易于阅读和编,也易于机器解析和生成。JSON数据格式是一种键值对的数据结构,可以表示数字、字符串布尔值、数组和对象等数据类型。

JSON解析

在iOS中,可以使用NSJSONSerialization类将JSON数据转换为Foundation对象。以下是一个示例代码,演示如何将JSON数据转换为Foundation对象:

NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
    NSLog(@"JSON解析失败:%@", error);
} else {
    if ([jsonObject isKindOfClass:[NSDictionary class]]) {
        NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
        // 处理字典类型的JSON数据
    } else if ([jsonObject isKindOfClass:[NSArray class]]) {
        NSArray *jsonArray = (NSArray *)jsonObject;
        // 处理数组类型的JSON数据
    }
}

在上面的代码中,我们首先将JSON字符串转换为NSData对象,后使用NSJSONSerialization类将NSData对象转换为Foundation。如果转换失败,会输出错误信息;如果转换成功,会根据Foundation对象的类型进行相应的处理。

访问JSON数据

一旦将JSON数据转换为Foundation对象,就可以使用Objective-C语言访问JSON数据。以下是一个示例代码,演示如何访问JSON数据:

NSDictionary *jsonDictionary = @{@"name": @"John", @"age": @30};
NSString *name = jsonDictionary[@"name"];
NSNumber *age = jsonDictionary[@"age"];
NSLog(@"name: %@, age: %@", name, age);

在上面的代码中,我们首先创建了一个字典类型的JSON数据,然后使用[]操作符访问字典中的键值对。

示例1:解析简单的JSON数据

以下是一个例代码,演示如何解析简单的JSON数据:

NSString *jsonString = @"{\"name\": \"John\", \"age\": 30}";
NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
    NSLog(@"JSON解析失败:%@", error);
} else {
    if ([jsonObject isKindOfClass:[NSDictionary class]]) {
        NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
        NSString *name = jsonDictionary[@"name"];
        NSNumber *age = jsonDictionary[@"age"];
        NSLog(@"name: %@, age: %@", name, age);
    }
}

在上面的代码中,我们首先创建了一个JSON字符串,然后使用NSJSONSerialization类将其转换为Foundation对象。最后,我们使用[]操作符访问字典中的键值对。

示例2:解析复杂的JSON数据

以下是一个示例代码,演示如解析复杂的JSON数据:

NSString *jsonString = @"{\"name\": \"John\", \"age\": 30, \"address\": {\"city\": \"New York\", \"state\": \"NY\"}, \"phones\": [\"1234567890\", \"0981\"]}";
NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
    NSLog(@"JSON解析失败:%@", error);
} else {
    if ([jsonObject isKindOfClass:[NSDictionary class]]) {
        NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
        NSString *name = jsonDictionary[@"name"];
        NSNumber *age = jsonDictionary[@"age"];
        NSDictionary *address = jsonDictionary[@"address"];
        NSString *city = address[@"city"];
        NSString *state = address[@"state"];
        NSArray *phones = jsonDictionary[@"phones"];
        NSLog(@"name: %@, age: %@, city: %@, state: %@, phones: %@", name, age, city, state, phones);
    }
}

在上面的代码中,我们首先创建了一个复的JSON字符串,然后使用NSJSONSerialization类其转换为Foundation对象。最后,我们使用[]操作符访问字典中的键值和数组中的元素。

示例3:使用Swift解析JSON数据

以下是一个示例代码,演示如何使用Swift解析JSON数据:

let jsonString = "{\"name\": \"John\", \"age\": 30}"
let jsonData = jsonString.data(using: .utf8)!
do {
    let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
    if let jsonDictionary = jsonObject as? [String: Any] {
        let name = jsonDictionary["name"] as? String
        let age = jsonDictionary["age"] as? Int
        print("name: \(name ?? ""), age: \(age ?? 0)")
    }
} catch {
    print("JSON解析失败:\(error)")
}

在上面的代码中,我们首先创建了一个JSON字符串,然后使用JSONSerialization类将其转换为Foundation对象。最后,我们使用[]操作符访问字典的键值对。

总结:

  • 可以使用NSSerialization类将JSON数据转换为Foundation对象。
  • 可以使用Objective-C语言访问JSON数据。
  • 可以析简单的JSON数据和的JSON数据。

示例4:使用Swift解析JSON数组

以下是一个示例代码,演示如何使用Swift解析JSON数组:

let jsonString = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Mary\", \"age\": 25}]"
let jsonData = jsonString.data(using: .utf8)!
do {
    let jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]]
    for jsonDictionary in jsonArray ?? [] {
        let name = jsonDictionary["name"] as? String
        let age = jsonDictionary["age"] as? Int
        print("name: \(name ?? ""), age: \(age ?? 0)")
    }
} catch {
    print("JSON解析失败:\(error)")
}

在上面的代码中,我们首先创建了一个JSON数组字符串,然后使用JSONSerialization类将其转换为Foundation对象。最后,我们使用[]操作符访问字典的键值对。

总结:

  • 可以使用JSONSerialization类将JSON数据转换为Foundation对象。
  • 可以使用Swift语言访问JSON数据。
  • 可以解析简单的JSON数据和的JSON数据。
  • 可以解析JSON数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ios基础篇(二十七)——json解析 - Python技术站

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

相关文章

  • 详解Android布局加载流程源码

    详解Android布局加载流程源码的攻略如下: 1. 确定需求 在详细讲解Android布局加载流程源码之前,需要先了解本次攻略的目的和需求。本次攻略的目的是通过对Android布局加载流程源码的分析,深入了解Android布局加载的过程和原理,以便进一步优化相关的开发工作。 2. 学习布局加载流程 2.1 布局加载的基本流程 Android布局加载的基本流…

    other 2023年6月25日
    00
  • 一篇文章弄懂Python关键字、标识符和变量

    一篇文章弄懂Python关键字、标识符和变量 引言 在学习Python编程语言时,了解关键字、标识符和变量是非常重要的。本文将详细讲解这些概念,并提供示例来帮助读者更好地理解。 关键字 关键字是Python语言中具有特殊含义的单词或标记。这些关键字被用于定义语法结构和控制流程。在Python中,关键字是不能被用作标识符(变量名、函数名等)的。 以下是Pyth…

    other 2023年8月9日
    00
  • C语言深入详解四大内存函数的使用

    C语言深入详解四大内存函数的使用攻略 1. malloc函数 malloc函数用于在堆内存中动态分配指定大小的内存空间,并返回一个指向该内存空间的指针。其函数原型如下: void* malloc(size_t size); 使用示例: #include <stdio.h> #include <stdlib.h> int main() …

    other 2023年8月2日
    00
  • QT中出现“无法解析的外部符号”错误

    在QT中出现“无法解析的外部符号”错误通常是由于编译器无法找到所需的函数或变量定义,或者链接器无法找到所需的库文件。在本文中,我们将详细介绍解决这种错误的完整攻略,并提供两个示例说明。 解决“无法解析的外部符号”错误的攻略 1. 检查头文件和源文件 首先,我们需要检查头文件和源文件是否正确包含所需的函数或变量定义。如果头文件或源文件中缺少所需的定义,编译器将…

    other 2023年5月5日
    00
  • 关于utf8:仅包含字符集的content-type

    以下是关于“关于utf8:仅包含字符集的content-type”的完整攻略,过程中包含两个示例。 背景 Content-Type是HTTP协议中的头部字段,用于指定HTTP消息的媒体类型。在Content-Type中,我们可以指定字符集,以确保正确地解析HTTP消息中文本数据。本攻略将介绍如何在Content-Type中仅包含字符集,以确保正确地解析HTT…

    other 2023年5月9日
    00
  • vs2019 MFC实现office界面的画图小项目

    关于“vs2019 MFC实现office界面的画图小项目”的完整攻略,我将会对整个过程进行详细讲解,同时提供两个示例。 一、创建MFC应用程序 首先,我们需要创建一个MFC应用程序,步骤如下: 1.打开Visual Studio 2019,点击“文件”-“新建”-“项目”-“MFC应用程序向导”,然后点击“下一步”。 2.在“应用程序类型”选项卡中,选择“…

    other 2023年6月26日
    00
  • iOS10.0.2升级需要多大空间 更新升级iOS 10.0.2正式版需要占用多大内存

    升级iOS 10.0.2需要的空间取决于您的设备型号和当前运行的操作系统版本。一般来说,iOS 10.0.2的升级文件大小约为200-300 MB。然而,为了成功完成升级,您需要更多的可用存储空间。 以下是升级iOS 10.0.2的完整攻略: 检查可用存储空间:在升级之前,您应该检查设备上的可用存储空间。打开设置应用程序,然后转到“通用”>“存储空间与…

    other 2023年8月1日
    00
  • 解决DCEF3 在 BeforePopup 事件中打开新窗体的问题

    我将为您提供解决 DCEF3 在 BeforePopup 事件中打开新窗体的问题的完整攻略,包括问题的原因、解决方法和两个示例说明。 问题原因 在 DCEF3 中,如果在 BeforePopup 事件中打开新窗体,会出现无法正常显示的问题。这是因为 BeforePopup 事件是在新窗体创建之前触发的,此时新窗体还没有完全创建,无法正常显示。 解决方法 为了…

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