所以我正在尝试解码json并收到此错误。
这是JSON:
{ "SERVERWebSystemInfoGet": {
"Return Code" : 0,
"Return String" : "No Error",
"Info" : "{\"IT\":\"IT109200310_0\",\"MAC\":\"00:40:7F:41:F8:81\",\"UUID\":\"uuid:858fba00-d3a0-11dd-a001-00407f41f881\",\"SN\":\"ENG031\",\"ModelNumber\":\"DH-390 2MP\",\"ModelName\":\"DH-390 2MP\",\"FwVer\":\"v1.0.0.34\",\"HwVer\":\"\",\"FriendlyName\":\"DH-390 2MP ENG031\",\"UpTime\":548}" }
}
这是我的模特:
struct Information: Codable {
let ModelName : String?
}
struct GetInformation: Codable {
let Info: [String: Information]?
}
struct WebSystemInfo: Codable {
let SERVERWebSystemInfoGet: GetInformation?
}
这是方法:
func parseGetInfo(data: Data) {
do {
let info = try JSONDecoder().decode(WebSystemInfo.self, from: data)
print(info)
} catch let error{
print(error)
}
}
这是我得到的错误:
typeMismatch(Swift.Dictionary Swift.DecodingError.Context(codingPath:[CodingKeys(stringValue:“ SERVERWebSystemInfoGet”,intValue:nil), CodingKeys(stringValue:“ Info”,intValue:nil)], debugDescription:“预期对Dictionary进行解码,但找到了一个字符串/数据。”,底层错误:nil))
答案 0 :(得分:2)
之所以会这样,是因为Info
值实际上是一个字符串,而不是一个字典。
请注意,它以引号开头。
更改模型以返回Dictionary而不是String。
答案 1 :(得分:2)
此
"Info" : "{\"IT\":\"IT109200310_0\",\"MAC\":\"00:40:7F:41:F8:81\",\"UUID\":\"uuid:858fba00-d3a0-11dd-a001-00407f41f881\",\"SN\":\"ENG031\",\"ModelNumber\":\"DH-390 2MP\",\"ModelName\":\"DH-390 2MP\",\"FwVer\":\"v1.0.0.34\",\"HwVer\":\"\",\"FriendlyName\":\"DH-390 2MP ENG031\",\"UpTime\":548}" }
是json字符串,不是您需要的字典
let Info:String?
答案 2 :(得分:1)
您复制了带有转义位的JSON:”
和\”
,从而使信息词典成为字符串。
请尝试删除保留的转义符以下字符串,是否可以对其进行解码。
{
"SERVERWebSystemInfoGet": {
"Return Code": 0,
"Return String": "No Error",
"Info": {
"IT": "IT109200310_0",
"MAC": "00:40:7F:41:F8:81",
"UUID": "uuid:858fba00-d3a0-11dd-a001-00407f41f881",
"SN":"ENG031",
"ModelNumber": "DH-390 2MP",
"ModelName": "DH-390 2MP",
"FwVer": "v1.0.0.34",
"HwVer": "x",
"FriendlyName": "DH-390 2MP ENG031",
"UpTime": "548"
}
}
}
然后,您可以考虑更改服务器输出,或者如果无法遵循this guide进行手动解码info
,则从手动编码和解码具有重要意义。