问题标签 [codable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - 如何在 Swift 中表示通用 JSON 结构?
我想在 Swift 中表示一个通用的 JSON 对象:
但是[String: Any]
编译器建议的类型并不能很好地工作。例如,我无法检查该类型的两个实例是否相等,而这应该可以使用两个 JSON 树。
也不起作用的是使用Codable
机器将该值编码为 JSON 字符串:
这会因错误而爆炸:
我知道我可以引入一个精确的类型,但我追求的是一个通用的 JSON 结构。我什至尝试为通用 JSON 引入特定类型:
但是在Codable
为这个枚举实现时,我不知道如何实现encode(to:)
,因为键控容器(用于编码对象)需要一个特定的CodingKey
参数,而我不知道如何得到它。
真的不可能创建一个Equatable
通用的 JSON 树并使用它进行编码Codable
吗?
json - 如何在 Swift 4 的可解码协议中使用自定义键?
Decodable
Swift 4 通过协议引入了对原生 JSON 编码和解码的支持。我如何为此使用自定义键?
例如,假设我有一个结构
我可以将其编码为 JSON。
我可以将它编码回一个对象。
但是如果我有一个 json 对象
我将如何告诉该Address
地图zip_code
上的解码器zip
?我相信您使用新CodingKey
协议,但我不知道如何使用它。
swift - Swift 4 可编码解码 json
我正在尝试实现新Codable
协议,所以我添加Codable
到我的结构中,但一直在解码 JSON。
这是我以前的:
结构 -
客户 -
...
这是我现在所拥有的,除了我无法弄清楚解码器部分:
结构 -
客户 -
...
它打印“不工作”,因为我无法通过该decoder.decode
部分。有任何想法吗?将根据需要发布任何额外的代码,谢谢!
编辑:
API JSON 示例:
如果我打印self.jsonResponse
我得到这个:
我的新代码:
...
json - 使用 JSONEncoder 编码/解码符合协议的类型数组
我正在尝试使用 Swift 4 中的新 JSONDecoder/Encoder 找到对符合 swift 协议的结构数组进行编码/解码的最佳方法。
我做了一个小例子来说明这个问题:
首先我们有一个协议标签和一些符合这个协议的类型。
然后我们有一个类型文章,它有一个标签数组。
最后我们对文章进行编码或解码
这是我喜欢的 JSON 结构。
问题是在某些时候我必须打开 type 属性来解码 Array 但要解码 Array 我必须知道它的类型。
编辑:
我很清楚为什么 Decodable 不能开箱即用,但至少 Encodable 应该可以工作。以下修改后的 Article 结构编译但崩溃并显示以下错误消息。
这是 Codeable.swift 的相关部分
来源:https ://github.com/apple/swift/blob/master/stdlib/public/core/Codable.swift
json - 声明一个符合协议的泛型常量
好的,通过使用新的可解码协议编写一些网络代码来修补 Swift 4。以下错误带有几个编译器错误:
decodedableType 应该是符合 Decodable 协议的任何结构/类的“类型”(即 User.self,其中 User 符合可解码或可编码)。我如何告诉编译器这个?
编辑:换句话说,我想写这样的代码......
这意味着将第一个代码块中的泛型参数保存在结构上的常量内。我只是不知道如何在 Swift 中正确写出类型。
swift - JSONEncoder 适用于 [String:String] 对 [String:Codable] 失败
我在玩新Codable
协议JSONEncoder
以下方法引发了一个奇怪的异常:
fatal error: Dictionary<String, Decodable & Encodable> does not conform to Encodable because Decodable & Encodable does not conform to Encodable.
当我将签名更改为
private func generateJSONData(body: [String: Encodable]?)
fatal error: Dictionary<String, Encodable> does not conform to Encodable because Encodable does not conform to Encodable.:
有趣的是,这适用于[String: String]
有[String: Codable]
没有不可编码的原因?
swift - 可编码协议一致性
我想实现一个符合的容器类型Codable
,但遇到了一些问题。我想通用化我的容器以容纳任何可编码和可解码的元素。最初,我有这个:
...但是更改了它,以便我可以拥有某种类型的安全性。有人可以解释这里到底发生了什么吗?
我的代码
编译器输出
swift - 在 Swift 4 中使用 Decodable 和继承
如果使用类继承会破坏类的可解码性。例如下面的代码
输出是:
现在,如果我反转这一点,名称会解码,但 id 不会。
输出是:
而且你不能在这两个类中表达 Codable 。