Swift中的JSON数据解析

本文介绍了Swift中解析JSON数据的方法,包括无脑叠加和使用Decodable协议。解析嵌套JSON时,通过定义结构体和遵循Decodable协议,可以方便地解析复杂的数据结构。详细解析代码示例给出。
摘要由CSDN通过智能技术生成

本文原载于我的博客:https://www.seekingmini.top/archives/swift-json

0 写在前面

平时写小项目时请求JSON格式的数据,怎么解析向来是一个大问题,尤其碰到嵌套型的数据,更是不知道怎么写代码才好,所以写一篇教程来记录一下。刚好好久也没写博客了,赶快写一篇来刷刷存在感…

1 JSON是什么

JSON是一个以文字为主、轻量型,并且容易使用来储存以及交换资料的方式。它通常用来呈现结构性的数据,许多我每天使用的网页服务都是以JSON格式为主的API。

一句话概括,一个JSON对象,就是一个个的<key, value>对的集合{<key, value>})。

  • 举例
{
   
		"name": "SeekingMini",
		"age": 21,
		"hobby": ["Swimming", "Coding"],
		"location": {
   
				"country": "China",
				"city": "Suzhou"
		}
}

在这个例子中,最外层的{}包含了4个key,分别是nameagehobbylocation,它们都是String类型;而它们对应value的类型分别是StringInt[String]JSON对象。我们发现,key的类型一定是String即字符串,而value的类型是任意的。

正是因为value的类型可以是任何类型,如果valueJSON对象,这意味着出现了嵌套,如location对应的value就是一个嵌套在JSON对象里的JSON对象,这为我们解析JSON数据增加了复杂度。上面的例子可以用下面的结构图表示:

|-- TOP
	|-- "name" -> "SeekingMini"
	|-- "age" -> 21
	|-- "hobby" -> ["Swimming", "Coding"]
	|-- "location"
		|-- "country" -> "China"
		|-- "city" -> "Suzhou"

把它旋转90度来看,其实就是一个N叉树。根结点忽略不计,其他的非叶子结点都是key,而叶子结点都是value。当然了,如果没有嵌套,那么这棵树只有3层,顶层是TOP,表示最外层的大括号;第2层是key;第3层是value

但是出现了嵌套,location的子树就是它的value,而这棵子树自身是一个JSON对象,它的叶子结点就是非JSON对象类型的value

还是不清楚什么是JSON的话,就参考菜鸟教程吧!我们的重头戏放在如何解析包含嵌套的JSON数据。

2 解析JSON数据

解析一个JSON格式的数据,最重要的是什么?我认为应该是结构层次。我们只有定义了准确的结构层次,才能在每一层解析出正确的数据。

1) 无脑struct叠加

还是以上面的数据为例,我们可以定义出这样的结构体:

struct Person: Codable {
   
    var name: String
    var age: Int
    var hobby: [String]
    var location: Location  
}

extension Person {
   
    struct Location: Codable {
   
        var country: String
        va
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值