为什么以下代码会给我错误:
JSON写入中的类型无效(_SwiftValue).
此行引发错误:
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters)
Run Code Online (Sandbox Code Playgroud)
完整代码:
let parameters:Parameters = ["resource":[
[
"appUserCode":uuidString,
"productNFCode": self.nfCode!,
"status":code,
"applicationKey":appDelegate.api_key
]
]
]
do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters)
} catch {
// No-op
}
Run Code Online (Sandbox Code Playgroud)
ddi*_*ego 45
我有这个问题,因为我的一个字符串是可选的.它试图序列化一个值,如:"Optional(\"string value \")"
而不是"字符串值"
Kri*_*aCA 34
如果您的问题仍未通过此处给出的答案解决.我相信里面的一个对象parameters可能不是的一个实例NSString,NSNumber,NSArray,NSDictionary,或NSNull.如JSONSerialization课程文档中所示:
可以转换为JSON的对象必须具有以下属性:
顶级对象是NSArray或NSDictionary.所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例.
所有字典键都是NSString的实例.数字不是NaN或无穷大.
其他规则可能适用.调用isValidJSONObject(_ :)或尝试转换是判断给定对象是否可以转换为JSON数据的明确方法.
因此,请检查对象中的任何parameters对象是否不满足上述约束.
gmo*_*mes 11
万一有人仍然遇到问题而且正在使用枚举,另一个原因可能是你传递了一个枚举值而不是它的rawValue.
例:
enum Status: String {
case open
case closed
}
Run Code Online (Sandbox Code Playgroud)
而不是传递枚举:
params = ["status": Status.open]
Run Code Online (Sandbox Code Playgroud)
通过
params = ["status": Status.open.rawValue]
Run Code Online (Sandbox Code Playgroud)
小智 8
您也可以调用此方法并查看您的参数是否可以转换为 JSON 对象,这将返回一个 Bool。
let checker = JSONSerialization.isValidJSONObject(parameters)
Run Code Online (Sandbox Code Playgroud)