对于Swift 3和Swift 4,String
有一个称为的方法data(using:allowLossyConversion:)
。data(using:allowLossyConversion:)
具有以下声明:
func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?
返回一个数据,该数据包含使用给定编码编码的String的表示形式。
在Swift 4中,可以将String
s data(using:allowLossyConversion:)
与JSONDecoder
s 结合使用decode(_:from:)
,以将JSON字符串反序列化为字典。
此外,夫特3和4斯威夫特,String
的data(using:allowLossyConversion:)
也可以配合使用JSONSerialization
的jsonObject(with:options:)
以反序列化JSON字符串到字典。
#1。Swift 4解决方案
对于Swift 4,JSONDecoder
有一种称为的方法decode(_:from:)
。decode(_:from:)
具有以下声明:
func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable
从给定的JSON表示形式解码给定类型的顶级值。
下面展示了如何使用该游乐场的代码data(using:allowLossyConversion:)
,并decode(_:from:)
以获得Dictionary
从JSON格式String
:
let jsonString = """
{"password" : "1234", "user" : "andreas"}
"""
if let data = jsonString.data(using: String.Encoding.utf8) {
do {
let decoder = JSONDecoder()
let jsonDictionary = try decoder.decode(Dictionary<String, String>.self, from: data)
print(jsonDictionary) // prints: ["user": "andreas", "password": "1234"]
} catch {
// Handle error
print(error)
}
}
#2。Swift 3和Swift 4解决方案
对于Swift 3和Swift 4,JSONSerialization
有一个称为的方法jsonObject(with:options:)
。jsonObject(with:options:)
具有以下声明:
class func jsonObject(with data: Data, options opt: JSONSerialization.ReadingOptions = []) throws -> Any
从给定的JSON数据返回Foundation对象。
下面展示了如何使用该游乐场的代码data(using:allowLossyConversion:)
,并jsonObject(with:options:)
以获得Dictionary
从JSON格式String
:
import Foundation
let jsonString = "{\"password\" : \"1234\", \"user\" : \"andreas\"}"
if let data = jsonString.data(using: String.Encoding.utf8) {
do {
let jsonDictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String : String]
print(String(describing: jsonDictionary)) // prints: Optional(["user": "andreas", "password": "1234"])
} catch {
// Handle error
print(error)
}
}