У меня есть следующая структура, которая используется для передачи данных JSON в конечную точку REST.Первоначально объект содержал только один уровень пар ключ-значение.В этом случае сериализация в объект JSON сработала правильно.
Теперь мне нужно добавить словарь в качестве параметра, который должен создать вложенный словарь в результирующем JSON.Однако добавление вложенного словаря приводит к тому, что JSONSerialization возвращает ноль.
Код:
struct ServicePayload:Codable {
private var name:String
private var type:String
private var deviceId:String
private var clientType:String
private var appInstanceId:String
private var version:String
private var addParams:[String:String] // causes failure
init(name:String, type:String, version:String, params:[String:String]) {
self.name = name
self.type = type
self.deviceId = Constants.Device.identifier!
self.version = version
self.clientType = "1"
self.appInstanceId = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
self.addParams = params
}
// json mapper
private enum CodingKeys:String, CodingKey {
case name = "name"
case type = "contentTypes"
case deviceId = "x-DeviceId"
case clientType = "x-ClientType"
case appInstanceId = "x-InstanceId"
case version = "version"
case addParams = "optionalParams"
}
func getJsonObject() -> [String:String]? {
do {
let encoded = try JSONEncoder().encode(self)
if let json = try JSONSerialization.jsonObject(with: encoded, options: []) as? [String : String] {
return json
}
} catch (let error) {
print("Error building JSON: \(error.localizedDescription)")
}
return nil
}
}
Без поля addParams JSONSerialization работает, как и ожидалось.Когда я добавляю поле addParams, которое добавляет вложенный словарь к объекту, JSONSerialization завершается ошибкой и возвращает nil.
Может кто-нибудь подсказать, почему я не могу добавить вложенный словарь в этом сценарии?
Спасибо!