'NSInvalidArgumentException',原因:'Invalid type in JSON write (__SwiftValue)'
'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__SwiftValue)'
当我尝试对对象进行编码时出现以下错误。
'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__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,即使对于正确编码的请求也是如此。
问题是您试图组合两种类型的 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
, Int
).
当我尝试对对象进行编码时出现以下错误。
'NSInvalidArgumentException', reason: 'Invalid type in JSON write (__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,即使对于正确编码的请求也是如此。
问题是您试图组合两种类型的 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
, Int
).