如何在iPhone/iOS中解析JSON物件?
JSON代表Javascript物件表示法。大多數情況下,在處理API或其他服務時,資料以JSON格式返回,我們需要將其轉換為可用且受支援的語言格式。
iOS的基礎框架提供了一個JSONSerialization類,用於將JSON轉換為受支援的格式,例如字典、字串、布林值等。
JSONSerialization類提供了一個方法jsonObject(with:options:),它解析JSON並返回Any作為結果,如果資料無法解析,則返回一個錯誤。
// Example JSON:
/*
{
"age": 42.0,
"name": {
"firstName": “tut”
}
}
*/讓我們透過另一個例子來看一下,假設我們從API呼叫中獲得了資料,現在要解析這個資料,我們將使用JSONSerialization.jsonObject(with:options:)
if let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { }// 現在上面的JSON物件包含接收到的資料,作為一個字串和Any的字典,或者它會跳出if let塊到else
// 假設json包含一個鍵“Student”,並且與之關聯的值是一個字典
guard let student = json[“Student”] as? [String: Any] else { return }這就是我們解析JSON並從中獲取值的方法。我們可以使用模型和初始化器進一步增強這一點。讓我們透過建立一個本地JSON檔案然後嘗試解析它來看一個例子。
讓我們建立一個包含以下資料的JSON檔案,並將其儲存為exercises.json
{
"Warmup": {
"Exercises": [
{
"Name": "Neck Strech",
"images": [
"http:sdf.com",
"sdf",
"sdf",
"sdf"
],
"time": 30
}
]
}
}我們現在將解析這個本地JSON並使用以下程式碼列印結果:
if let filePath = Bundle.main.path(forResource: "exerciseData", ofType: "json") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe)
let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves)
if let exercises = jsonResult as? [String:AnyObject] {
if let warmups = exercises["Warmup"] as? [String:AnyObject] {
print(warmups)
}
}
} catch {
print(error.localizedDescription)
}
}當我們執行這段程式碼時,我們將得到以下輸出。

廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP