iOS:一般从 NSObject 类序列化反序列化复杂 JSON

jsIOS

1个回答

写回答

咩咩羊1

2025-07-09 16:55

+ 关注

IOS
IOS

IOS:一般从 NSObject 类序列化/反序列化复杂 JSON

在 IOS 开发中,我们经常需要与服务器进行数据交互,其中一种常见的数据格式是 JSON。当服务器返回的 JSON 数据结构较为复杂时,我们通常会使用 NSObject 类进行序列化和反序列化的操作。本文将介绍如何使用自然语言来描述这个过程,并提供一个案例代码来帮助读者更好地理解。

序列化 JSON

首先,让我们来看看如何将一个复杂的 JSON 数据序列化为一个 NSObject 对象。在 IOS 中,我们可以使用 NSJSONSerialization 类提供的方法来完成这个任务。

Swift

// 假设服务器返回的 JSON 数据如下所示

let JSon = """

{

"name": "John Doe",

"age": 30,

"address": {

"street": "123 MAIn Street",

"city": "New York",

"state": "NY"

},

"friends": [

{

"name": "Jane Smith",

"age": 28

},

{

"name": "Bob Johnson",

"age": 32

}

]

}

"""

// 将 JSON 数据转换为 Data 对象

guard let data = JSon.data(using: .utf8) else {

print("Invalid JSON data")

return

}

do {

// 将 Data 对象反序列化为一个 Any 类型的对象

let JSonObject = try JSONSerialization.JSonObject(with: data, options: [])

// 判断反序列化后的对象是否为一个字典类型

guard let JSonDict = JSonObject as? [String: Any] else {

print("Invalid JSON format")

return

}

// 创建一个自定义的 NSObject 子类对象

let person = Person()

// 使用 KVC(键值编码)来将字典中的值赋给对象的属性

person.name = JSonDict["name"] as? String

person.age = JSonDict["age"] as? Int

// 处理嵌套的字典

if let addressDict = JSonDict["address"] as? [String: Any] {

let address = Address()

address.street = addressDict["street"] as? String

address.city = addressDict["city"] as? String

address.state = addressDict["state"] as? String

person.address = address

}

// 处理嵌套的数组

if let friendsArray = JSonDict["friends"] as? [[String: Any]] {

var friends: [Friend] = []

for friendDict in friendsArray {

let friend = Friend()

friend.name = friendDict["name"] as? String

friend.age = friendDict["age"] as? Int

friends.append(friend)

}

person.friends = friends

}

// 打印解析后的对象

print(person)

} catch {

print("JSON serialization error: \(error.localizedDescription)")

}

在上面的代码中,我们首先将服务器返回的 JSON 数据转换为一个 Data 对象,然后使用 JSONSerialization 类的 JSonObject(with:options:) 方法将该 Data 对象反序列化为一个 Any 类型的对象。接着,我们判断该对象是否为一个字典类型,如果是,则将字典中的值赋给我们自定义的 NSObject 子类对象的属性。在处理嵌套的字典和数组时,我们需要进一步递归地进行解析,并将解析后的对象赋给相应的属性。最后,我们可以打印解析后的对象,以验证序列化操作是否成功。

反序列化 JSON

除了将 JSON 数据序列化为一个 NSObject 对象,我们还可以将一个 NSObject 对象反序列化为 JSON 数据。这在向服务器发送数据或者将数据存储到本地文件时非常有用。

Swift

// 创建一个自定义的 NSObject 子类对象

let person = Person()

person.name = "John Doe"

person.age = 30

let address = Address()

address.street = "123 MAIn Street"

address.city = "New York"

address.state = "NY"

person.address = address

let friend1 = Friend()

friend1.name = "Jane Smith"

friend1.age = 28

let friend2 = Friend()

friend2.name = "Bob Johnson"

friend2.age = 32

person.friends = [friend1, friend2]

do {

// 使用 JSONSerialization 类的 data(withJSONObject:options:) 方法将对象序列化为 JSON 数据

let JSonData = try JSONSerialization.data(withJSONObject: person.toDictionary(), options: .prettyPrinted)

// 将 JSON 数据转换为字符串输出

if let JSonString = String(data: JSonData, encoding: .utf8) {

print(JSonString)

}

} catch {

print("JSON serialization error: \(error.localizedDescription)")

}

在上面的代码中,我们首先创建了一个自定义的 NSObject 子类对象,并设置了其属性的值。然后,我们使用 JSONSerialization 类的 data(withJSONObject:options:) 方法将该对象序列化为 JSON 数据。最后,我们将 JSON 数据转换为字符串,并输出。

通过本文的介绍,我们了解了如何使用自然语言来描述在 IOS 开发中从 NSObject 类序列化/反序列化复杂的 JSON 数据的过程。我们使用了 NSJSONSerialization 类提供的方法来进行序列化和反序列化的操作,并通过一个案例代码来演示了具体的实现步骤。希望读者通过本文的学习,能够更好地掌握如何处理复杂的 JSON 数据。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号