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

以下是关于“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 三级NestedScroll嵌套滚动实践

    Android 三级NestedScroll嵌套滚动实践攻略 在Android开发中,NestedScroll嵌套滚动是一种强大的技术,可以实现复杂的滚动效果。本攻略将详细介绍如何实现Android三级NestedScroll嵌套滚动,并提供两个示例说明。 1. NestedScroll简介 NestedScroll是Android提供的一种滚动机制,可以在…

    other 2023年7月27日
    00
  • javascript slice(1)中的1在此程序中指的是什么?

    以下是关于“javascript slice(1)中的1在此程序中指的是什么?”的完整攻略,包含两个示例。 JavaScript slice(1)中的1在此程序中指的是什么? 在JavaScript中,slice()方法用于从数组中提取一部分元素,并返回一个新的数组。slice()方法可以接受两个参数,第一个参数指定开始提取的位置,第二个参数指定结束提取的位…

    other 2023年5月9日
    00
  • git checkout 命令使用详解

    Git Checkout 命令使用详解 概述 Git Checkout 是一个常用的 Git 命令,用于切换 Git 工作目录中的分支或者回到某个特定的提交状态。 命令格式 该命令的格式为: git checkout <branch> 或者 git checkout <commit> 其中 <branch> 可以是分支名、…

    other 2023年6月26日
    00
  • jquery延迟执行

    jQuery延迟执行 jQuery是现代Web开发中常用的JavaScript库之一,它提供了许多方便的函数和工具,可以加快项目的开发进度。其中一个重要功能是延迟执行某些操作,这在一些需要异步加载和处理的情况下尤为重要。本文将介绍一些实现jQuery延迟执行的方法。 使用setTimeout 最常见的延迟执行方法是使用setTimeout()函数。该函数接受…

    其他 2023年3月28日
    00
  • Android中ViewPager的PagerTabStrip与PagerTitleStrip用法实例

    Android中ViewPager的PagerTabStrip与PagerTitleStrip用法实例 ViewPager是Android中常用的布局容器,用于实现滑动切换不同的页面。PagerTabStrip和PagerTitleStrip是ViewPager的两个常用子类,用于显示页面标题和提供导航功能。本攻略将详细介绍PagerTabStrip和Pag…

    other 2023年7月28日
    00
  • 针对iOS10新增Api的详细研究

    针对iOS10新增API的详细研究 API简介 在iOS10的开发中,苹果引入了大量的新API,以提供更好的用户体验和更强的功能支持。以下是主要的新增API列表: UserNotification框架 SiriKit框架 HomeKit框架 Speech框架 CallKit框架 Messages框架 Photos框架 下面我们详细讲解每个新增API框架的用途…

    other 2023年6月26日
    00
  • Android开发之Socket通信传输简单示例

    下面是针对“Android开发之Socket通信传输简单示例”的完整攻略: 1. 简介 本示例将介绍如何使用Android开发中的Socket通信来进行数据传输,其中Android作为客户端发送数据,Java服务器进行接收和处理数据。 2. 创建服务器端 首先,我们需要在Java中创建一个服务器端,用于接收来自Android客户端的数据。代码如下: impo…

    other 2023年6月27日
    00
  • 我是这么安装使用.net5框架的

    下面是关于如何安装和使用.NET 5框架的完整攻略。 背景 .NET 5是一个跨平台的开源框,用于构高性能、可扩展的Web应用程序、桌面应用程序和动应用程序。本攻略将介绍如何在Windows、Linux和macOS上安装和使用.NET 5框架。 步骤 1. 下.NET 5 SDK 首先,我们需要下载.NET 5 SDK。可以以下链接下载: https://d…

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