尝试编码对象时出现以下错误。
'NSInvalidArgumentException',原因:“ JSON写入(__SwiftValue)中的类型无效”
此对象的定义如下:-
public struct Item: Codable {
public var _id: Int
public var name: String
public var price: Float
public init(_id: Int, name: String, price: Float) {
self._id = _id
self.name = name
self.price = price
}
public enum CodingKeys: String, CodingKey {
case _id = "id"
case name
case price
}
}
我正在尝试通过以下方式对其进行编码:
public func createDictionaryRequestForAddingItems(item : Item)->Data{
let dictRequest = ["item":item];
let dataRequest = try! JSONSerialization.data(withJSONObject: dictRequest, options: []);
return dataRequest;
}
如果我不是使用项目对象而是直接使用诸如String或Int之类的简单对象,那么这一切正常,但是当请求需要一个Item
对象(该对象是IS-A Codable
实例)时),则出现上述错误。
JSONSerialization.isValidJSONObject(item)
始终给出false,即使对于已正确编码的请求也是如此。
答案 0 :(得分:0)
问题是您试图结合两种类型的JSON编码。 JSONSerialization
和Codable
。 JSONSerialization
与Codable
无关。
实际上,您想要这样的东西:
public func createDictionaryRequestForAddingItems(item: Item) -> Data {
let dictRequest = ["item": item]
let dataRequest = try! JSONEncoder().encode(dictRequest)
return dataRequest
}
JSONSerialization
只能编码以下类型:Array
,Dictionary
,String
,Bool
和数字类型(例如Double
,{ {1}}。