【发布时间】:2019-02-15 08:29:05
【问题描述】:
我的 JSON 看起来像:
{
"status": true,
"data": {
"img_url": "/images/houses/",
"houses": [
{
"id": "1",
"name": "Kapital",
"url": "https://kapital.com/",
"img": "10fbf4bf6fd2928affb180.svg"
}
]
}
}
我正在使用下一个结构:
struct ServerStatus: Decodable {
let status: Bool
let data: ServerData
}
struct ServerData: Decodable {
let img_url: String
let houses: [House]
}
struct House: Decodable {
let id: Int
let img: String
let name: String
let url: String
}
但是当我使用时:
let houses = try JSONDecoder().decode(ServerStatus.self, from: data)
我得到下一个错误:
3 : CodingKeys(stringValue: "id", intValue: nil)
- debugDescription : "Expected to decode Int but found a string/data instead."
这是我第一次使用 Decodables,我正在谷歌搜索这个问题,但无法解决它。有人可以帮我找出问题所在并解释一下吗?
当我从ServerStatus 中删除data 部分时,一切正常。所以问题在于解析data部分
【问题讨论】:
-
id是 JSON 中的字符串,但您的struct将id定义为Int。将其更改为String,问题就消失了。 -
@rmaddy 哇!那太快了!非常感谢!但是一个简单的问题,我怎样才能将
ID保存为整数? -
@J.Doe 你不能在服务器端发送一个 Int 吗?
-
看起来在未来,我们将能够选择加入 string-as-int 行为。见bugs.swift.org/browse/SR-5249。同时,转到该链接并支持该问题:)。
-
@ielyamani,你如何从服务器发送一个 int? json 编码时,所有数值都会自动用引号括起来。我不知道你将如何从服务器返回一个实际的整数。