本文原载于我的博客: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,分别是name、age、hobby、location,它们都是String类型;而它们对应value的类型分别是String、Int、[String]、JSON对象。我们发现,key的类型一定是String即字符串,而value的类型是任意的。
正是因为value的类型可以是任何类型,如果value是JSON对象,这意味着出现了嵌套,如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
var city: String
}
}
稍微说明一下:Person这个结构体就代表了整个JSON对象

本文介绍了Swift中解析JSON数据的方法,包括无脑叠加和使用Decodable协议。解析嵌套JSON时,通过定义结构体和遵循Decodable协议,可以方便地解析复杂的数据结构。详细解析代码示例给出。
最低0.47元/天 解锁文章
2436

被折叠的 条评论
为什么被折叠?



