【发布时间】:2021-12-28 17:07:26
【问题描述】:
根据我的问题,我想将 json 的每个字段解码为字符串值。
我的 json 看起来像这样
{ name: "admin_tester",
price: 99.89977202,
no: 981,
id: "nfs-998281998",
amount: 98181819911019.828289291329 }
我想创建这样的结构
struct StockNFS: Decodable {
let name: String?
let price: String?
let no: String?
let id: String?
let amount: String?
}
但是如果我这样声明我的结构,当我使用 json 解码时,我会得到错误不匹配类型
我之所以要将每个值都映射到字符串,是因为如果我对price 和amount 使用双精度或小数,编码后有时值会不正确。例如 0.125,我会得到 0.124999999。
我只想接收字符串类型的任何数据,以便在 ui 上显示(而不是编辑或操作值)
我将不胜感激。非常感谢。
【问题讨论】:
-
您需要一个自定义
init(from:)来解码您的双精度值并执行正确的舍入。一些注意事项,为什么不使用Decimal而不是String作为价格和金额,以及为什么需要将Int值转换为字符串,因为Int 没有舍入问题。为什么你的结构中的一切都是可选的? -
@Joakim 非常感谢您的回复,我不使用十进制,因为有时我从 json 得到错误的值映射,例如 0.125,解码后得到 0.12499999。我设置 optional 是因为我想设置可为空的值(也许有时 api 在解码后没有返回该键,它可以是 nil。)
-
你能给我一些关于自定义 init() 的例子吗? @Joakim
标签: ios json swift codable decodable