在Swift中将字典转换为JSON
Swift提供了一个名为JSONSerialization的类,用于将字典转换为JSON字符串。我们将使用两个步骤在Swift语言中将字典转换为JSON字符串。步骤如下:
使用JSONSerialization.data()方法将字典转换为JSON数据格式,该方法将字典对象作为参数以及选项。
现在,使用String(data:encoding:)构造函数将JSON数据转换为JSON字符串格式。
在本文中,您将看到一些将字典转换为JSON字符串的示例。
JSONSerialization
iOS和macOS的Foundation框架默认包含JSONSerialization类。要创建Swift字典或数组,此类需要字符串或数据对象。使用相同的类,您还可以将字典或数组转换为JSON对象。JSONSerialization类处理序列化和反序列化过程。
以下是将字典转换为JSON字符串的示例
步骤1 - 创建一个全局函数,该函数将字典作为参数进行转换。
步骤2 - 使用data(withJSONObject:options:)方法将字典转换为JSON数据格式。
步骤3 - 在此方法中处理失败的情况,因为data()方法返回一个可选的数据值。
步骤4 - 使用String(data:encoding)方法将JSON数据转换为JSON字符串。
步骤5 - 处理失败的情况,因为此方法返回一个可选的字符串值。
import Foundation
func convertDictionaryToJSON(_ dictionary: [String: Any]) -> String? {
guard let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted) else {
print("Something is wrong while converting dictionary to JSON data.")
return nil
}
guard let jsonString = String(data: jsonData, encoding: .utf8) else {
print("Something is wrong while converting JSON data to JSON string.")
return nil
}
return jsonString
}
let dictionary: [String: Any] = ["name": "John Allen", "age": 32, "company": "Google Inc."]
if let output = convertDictionaryToJSON(dictionary) {
print("Input dictionary: \(dictionary)")
print("Output JSON: \(output)")
}
输出
Input dictionary: ["age": 32, "name": "John Allen", "company": "Google Inc."]
Output JSON: {
"age" : 32,
"name" : "John Allen",
"company" : "Google Inc."
}
请注意,如果字典包含无法转换为JSON的值,例如自定义对象或循环引用,则data(withJSONObject:options:)方法将抛出错误,并且do-try-catch块内的代码将不会执行。
使用扩展
还有另一种强烈推荐的方法可以将字典转换为JSON字符串。您可以创建一个扩展,并将这些函数添加到该扩展中。这将有助于在您的代码库中全局访问这些属性和方法。以下是如何使用扩展的示例。
扩展
import Foundation
extension Dictionary {
var jsonData: Data? {
return try? JSONSerialization.data(withJSONObject: self, options: [.prettyPrinted])
}
func toJSONString() -> String? {
if let jsonData = jsonData {
let jsonString = String(data: jsonData, encoding: .utf8)
return jsonString
}
return nil
}
}
用法
func convertDictionaryToJSON() {
let dictionary: [String: Any] = ["name": "John Allen", "age": 32, "company": "Google Inc."]
guard let jsonData = dictionary.jsonData else {
print("Something is wrong while converting dictionary to JSON data.")
return
}
guard let jsonString = dictionary.toJSONString() else {
print("Something is wrong while converting JSON data to JSON string.")
return
}
print("Input dictionary: \(dictionary)")
print("Output JSON: \(jsonString)")
}
convertDictionaryToJSON()
输出
Input dictionary: ["age": 32, "company": "Google Inc.", "name": "John Allen"]
Output JSON: {"age" : 32, "company" : "Google Inc.", "name" : "John Allen"}
结论
在Swift中,您可以通过低级API将原始JSON数据转换为集合,例如数组或字典。您可以使用JSONSerialization类将原始JSON对象转换为有意义的对象。此类内置于Foundation框架中。您可以在任何平台上使用此类,例如iOS、macOS、watchOS等。此外,反过来,您可以使用反序列化过程将自定义对象转换回原始JSON数据。
在Swift 4中,Apple引入了Codable协议,使序列化和反序列化过程变得容易。此协议提供了一种灵活的方式来使用JSON数据将数据解析并存储到模型类/结构体中。此协议可用于轻松地将模型对象转换为JSON数据。
Codable协议有助于减少代码并处理序列化和反序列化过程,使代码更简洁易维护。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP