З 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 у словник.
Крім того, з Swift 3 та Swift 4, String's data(using:allowLossyConversion:)також можна використовувати разом із JSONSerialization' s 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
Повертає об'єкт Foundation із даних JSON.
Код ігрової площадки нижче показує, як користуватися 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)
}
}