【Swift开发专栏】Swift中的JSON解析与处理

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【4月更文挑战第30天】本文介绍了Swift中的JSON解析与处理。首先,讲解了JSON的基础,包括其键值对格式和在Swift中的解析与序列化方法。接着,展示了如何使用`Codable`协议简化JSON操作,以及处理复杂结构的示例。通过这些内容,读者能掌握在Swift中高效地处理JSON数据的方法。

Swift 是苹果公司推出的一种强类型、安全的编程语言,它在 iOS、macOS、watchOS 和 tvOS 应用程序开发中扮演着重要角色。在网络编程中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种网络服务中。本文将通过三个部分,详细介绍 Swift 中的 JSON 解析与处理。

第一部分:JSON 基础

1.1 JSON 格式

JSON 是一种基于键值对的数据格式,它使用字符串作为键,并支持多种类型的值,包括数字、字符串、布尔值、数组、对象和 null。JSON 对象是由大括号 {} 包围的键值对集合,而 JSON 数组是由方括号 [] 包围的值列表。

{
   
  "name": "张三",
  "age": 30,
  "isStudent": false,
  "courses": ["数学", "英语", "物理"],
  "profile": {
   
    "height": 180,
    "weight": 70
  }
}
AI 代码解读

1.2 JSON 解析

在 Swift 中,可以使用 JSONSerialization 类将 JSON 数据转换为 Swift 中的数据类型。JSONSerialization 提供了将 JSON 数据转换为 Data 对象,以及将 Data 对象转换为 JSON 数据的功能。

import Foundation
let jsonString = """
{
   
  "name": "张三",
  "age": 30
}
"""
if let data = jsonString.data(using: .utf8) {
   
    do {
   
        if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
   
            print(json["name"] as? String) // 输出 "张三"
            print(json["age"] as? Int) // 输出 30
        }
    } catch {
   
        print("JSON 解析失败:\(error)")
    }
}
AI 代码解读

1.3 JSON 序列化

与 JSON 解析相反,JSON 序列化是将 Swift 中的数据类型转换为 JSON 格式的数据。这同样可以通过 JSONSerialization 类实现。

import Foundation
let dictionary: [String: Any] = [
    "name": "张三",
    "age": 30
]
if let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: []) {
   
    if let jsonString = String(data: jsonData, encoding: .utf8) {
   
        print(jsonString)
    }
}
AI 代码解读

第二部分:Swift 中的 JSON 处理

2.1 Codable 协议

Swift 4 引入了 Codable 协议,它简化了 JSON 的解析和序列化过程。通过实现 Codable 协议,Swift 类型和结构体可以自动进行 JSON 解析和序列化。

import Foundation
struct Person: Codable {
   
    var name: String
    var age: Int
}
let jsonString = """
{
   
  "name": "张三",
  "age": 30
}
"""
if let data = jsonString.data(using: .utf8) {
   
    do {
   
        let person = try JSONDecoder().decode(Person.self, from: data)
        print(person.name) // 输出 "张三"
        print(person.age) // 输出 30
    } catch {
   
        print("JSON 解析失败:\(error)")
    }
}
AI 代码解读

2.2 JSON 处理的高级用法

在实际开发中,JSON 数据的结构往往比较复杂,可能包含嵌套的对象和数组。Codable 协议同样可以很好地处理这些复杂结构。

import Foundation
struct Profile: Codable {
   
    var height: Double
    var weight: Double
}
struct Person: Codable {
   
    var name: String
    var age: Int
    var profile: Profile
}
let jsonString = """
{
   
  "name": "张三",
  "age": 30,
  "profile": {
   
    "height": 180,
    "weight": 70
  }
}
"""
if let data = jsonString.data(using: .utf8) {
   
    do {
   
        let person = try JSONDecoder().decode(Person.self, from: data)
        print(person.name) // 输出 "张三"
        print(person.age) // 输出 30
        print(person.profile.height) // 输出 180
        print(person.profile.weight) // 输出 70
    } catch {
   
        print("JSON 解析失败:\(error)")
    }
}
AI 代码解读
目录
打赏
0
0
0
0
320
分享
相关文章
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
90 27
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
113 31
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
170 4
JSON数据解析实战:从嵌套结构到结构化表格
【一步步开发AI运动小程序】十九、运动识别中如何解析RGBA帧图片?
本文介绍了如何将相机抽取的RGBA帧图像解析为`.jpg`或`.png`格式,适用于体测、赛事等场景。首先讲解了RGBA图像结构,其为一维数组,每四个元素表示一个像素的颜色与透明度值。接着通过`uni.createOffscreenCanvas()`创建离屏画布以减少绘制干扰,并提供代码实现,将RGBA数据逐像素绘制到画布上生成图片。最后说明了为何不直接使用拍照API及图像转换的调用频率建议,强调应先暂存帧数据,运动结束后再进行转换和上传,以优化性能。
前后端分离开发:如何高效调试API?有工具 vs 无工具全解析
在前后端分离的开发模式中,API 调试的效率直接影响项目的质量和交付速度。通过本文的对比分析,我们可以看到无工具调试模式虽具备灵活性和代码复用能力,但在操作便利性和团队协作上稍显不足。而传统的外部调试工具带来了可视化、高效协作与扩展性,却可能存在工具切换带来的开发链路断层问题。Apipost-Hepler 融合了两者的优势,让开发者无需离开熟悉的 IDEA 环境,就能享受可视化调试工具的强大功能。
67 5
|
1月前
|
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
66 7
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
158 29
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等