我有一个类似于bellow的结构:
struct MyStruct: Codable {
var id: Int?
}
我从服务器接收到的JSON是这样的:
{
"id": 12345
}
但是现在服务器端决定将所有数字作为引用的数字发送,如下所示:
{
"id": "12345"
}
当使用JSONDecoder().decode
解码这个json时,我得到了一个错误,The data couldn’t be read because it isn’t in the correct format
有没有什么方法,(除了为我到目前为止创建的每个结构编写自定义的可编码和可解码的实现)来解决这个问题?例如,在JSONDecoder()
上执行操作
2条答案
按热度按时间332nm8kg1#
你可以通过实现Decodable协议所需的初始化器init(from:)来实现:
别忘了解码其他属性的值。
q1qsirdb2#
实际上,在JSON中将数字作为带引号的字符串发送并不罕见。虽然最好是请求后端将数字序列化为JSON数字,但客户端开发人员通常无法直接影响后端开发人员。以下是几种解决方案:
1.手动实现
init(from: Decoder)
,如其他答案中所建议的。1.使用属性 Package 器,例如
@Quoted var int: Int?
。请记住,使用decodeIfPresent
扩展所有解码器容器类型作为属性 Package 器类型。1.使用自定义的
JSONDecoder
实现。1.利用可编码工具进行原生解码器,如CodableProxies、extensions和MetaCodable等。