如何在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