问题标签 [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.

0 投票
5 回答
2768 浏览

json - 如何在 Swift 中表示通用 JSON 结构?

我想在 Swift 中表示一个通用的 JSON 对象:

但是[String: Any]编译器建议的类型并不能很好地工作。例如,我无法检查该类型的两个实例是否相等,而这应该可以使用两个 JSON 树。

也不起作用的是使用Codable机器将该值编码为 JSON 字符串:

这会因错误而爆炸:

我知道我可以引入一个精确的类型,但我追求的是一个通用的 JSON 结构。我什至尝试为通用 JSON 引入特定类型:

但是在Codable为这个枚举实现时,我不知道如何实现encode(to:),因为键控容器(用于编码对象)需要一个特定的CodingKey参数,而我不知道如何得到它。

真的不可能创建一个Equatable通用的 JSON 树并使用它进行编码Codable吗?

0 投票
4 回答
72378 浏览

json - 如何在 Swift 4 的可解码协议中使用自定义键?

DecodableSwift 4 通过协议引入了对原生 JSON 编码和解码的支持。我如何为此使用自定义键?

例如,假设我有一个结构

我可以将其编码为 JSON。

我可以将它编码回一个对象。

但是如果我有一个 json 对象

我将如何告诉该Address地图zip_code上的解码器zip?我相信您使用新CodingKey协议,但我不知道如何使用它。

0 投票
3 回答
5115 浏览

swift - Swift 4 可编码解码 json

我正在尝试实现新Codable协议,所以我添加Codable到我的结构中,但一直在解码 JSON

这是我以前的:

结构 -

客户 -

...

这是我现在所拥有的,除了我无法弄清楚解码器部分:

结构 -

客户 -

...

它打印“不工作”,因为我无法通过该decoder.decode部分。有任何想法吗?将根据需要发布任何额外的代码,谢谢!

编辑:

API JSON 示例:

如果我打印self.jsonResponse我得到这个:

我的新代码:

...

0 投票
4 回答
38320 浏览

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

0 投票
4 回答
26447 浏览

swift - 如何在 Core Data 中使用 swift 4 Codable?

Codable 似乎是一个非常令人兴奋的功能。但我想知道我们如何在 Core Data 中使用它?特别是,是否可以直接从/到 NSManagedObject 编码/解码 JSON?

我尝试了一个非常简单的例子:

在此处输入图像描述

并定义Foo了自己:

但是当像这样使用它时:

编译器因以下错误而失败:

并且目标文件是定义的文件Foo

我想我可能做错了,因为我什至没有通过 a NSManagedObjectContext,但我不知道该把它贴在哪里。

核心数据支持Codable吗?

0 投票
1 回答
369 浏览

json - 声明一个符合协议的泛型常量

好的,通过使用新的可解码协议编写一些网络代码来修补 Swift 4。以下错误带有几个编译器错误:

decodedableType 应该是符合 Decodable 协议的任何结构/类的“类型”(即 User.self,其中 User 符合可解码或可编码)。我如何告诉编译器这个?

编辑:换句话说,我想写这样的代码......

这意味着将第一个代码块中的泛型参数保存在结构上的常量内。我只是不知道如何在 Swift 中正确写出类型。

0 投票
0 回答
193 浏览

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]没有不可编码的原因?

0 投票
0 回答
92 浏览

swift - 可编码协议一致性

我想实现一个符合的容器类型Codable,但遇到了一些问题。我想通用化我的容器以容纳任何可编码和可解码的元素。最初,我有这个:

...但是更改了它,以便我可以拥有某种类型的安全性。有人可以解释这里到底发生了什么吗?

我的代码

编译器输出

0 投票
6 回答
57333 浏览

json - 如何使用 Swift Decodable 协议解码嵌套的 JSON 结构?

这是我的 JSON

这是我希望将其保存到的结构(不完整)

我查看了Apple关于解码嵌套结构的文档,但我仍然不明白如何正确执行不同级别的 JSON。任何帮助都感激不尽。

0 投票
6 回答
38170 浏览

swift - 在 Swift 4 中使用 Decodable 和继承

如果使用类继承会破坏类的可解码性。例如下面的代码

输出是:

现在,如果我反转这一点,名称会解码,但 id 不会。

输出是:

而且你不能在这两个类中表达 Codable 。