Ios JSONDecoder-“;需要解码字典<;字符串,任意>;但却找到了一个字符串/数据。”;

Ios JSONDecoder-“;需要解码字典<;字符串,任意>;但却找到了一个字符串/数据。”;,ios,swift,decode,jsondecoder,Ios,Swift,Decode,Jsondecoder,所以我试图解码一个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-00407f41f88

所以我试图解码一个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)
    }
}
这就是我得到的错误:

类型不匹配(Swift.Dictionary) Swift.DecodingError.Context(codingPath:[CodingKeys(stringValue:“SERVERWebSystemInfoGet”,intValue:nil), 编码键(stringValue:“信息”,intValue:无)], debugDescription:“应解码字典,但找到了字符串/数据。”,underlineError:nil))


这是因为
Info
值实际上是一个字符串而不是字典。 请注意,它以引号开头


将模型更改为返回Dictionary而不是String。

这是因为
Info
值实际上是一个字符串而不是Dictionary。 请注意,它以引号开头

将模型更改为返回字典而不是字符串。

 "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?
这个

json字符串不是您需要的字典吗

let Info:String?

您复制了带有转义位的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"
    }
  }
}

然后,如果可以,您可以考虑更改服务器输出;如果不能,则可以手动解码
info
,方法如下:从手动编码和解码重要位开始。

您复制了包含转义位的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"
    }
  }
}

然后,如果可以,您可以考虑更改服务器输出;如果不能,则可以手动解码。

请学习理解解码错误消息,它们非常具有描述性。错误表示您要解码词典,但实际对象是字符串(信息)。请学习理解解码错误消息,它们非常具有描述性。错误表示您要解码字典,但实际对象是字符串(Info)。知道如何从结果中获取值吗?例如,我希望UUID值将服务器响应更改为dictionary或查看此,,,,,,,,知道如何从结果中获取值吗?例如,我希望UUID值将服务器响应更改为dictionary或查看以下内容,,,,,,,,,