问题标签 [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 投票
1 回答
775 浏览

swift4 - 有没有办法在 Swift 4 的可编码对象中插入额外的键?

正如问题所述:我有一个符合新Encodable协议的结构,并希望在结构本身中插入不作为变量或常量存在的键和值。我当前的解决方法是将它们作为常量添加到结构中,其唯一目的是添加到生成的 JSON 输出中。有没有办法做到这一点func encode(to encoder: Encoder) throws { ... }


背景资料

我有一个相当大的 Swift 4 项目,它需要一个 JSON 输出来在项目本身之外生成统计信息和可视化,所以我几乎所有的结构、类和枚举都符合新Encodable协议。输出已经在工作,但在某些方面可读性很差。特别是在一个描述光栅化工厂布局中的字段的结构中:

该字段具有包含以下情况的自定义位置(带有坐标x: Inty: Int)和自定义内容:enum FieldType

Position, FieldType, Robot,WorkstationField本身已经实现Encodable,但问题是我的字段的 JSON 输出如下所示:

正如您所看到的,在位置 (11, 6) 处除了空白字段之外还有其他内容,但不知道在我的模拟中只有工作站处于空闲状态,因此无法知道该字段包含什么内容。所以我尝试通过将 CodingKeys 定义为枚举来向我的工作站模型(机器人模型中的类比)添加一个"object"带有值的键:"workstation""robot"

这导致我struct Workstation不再符合Encodable. 所以我找到的唯一解决方案是添加一个常量let object = "workstation",但这是一个常量,其唯一目的是添加到输出中,我想避免这种情况。

0 投票
3 回答
1830 浏览

ios - 如何将 CodingKeys 用于符合 Codable 协议的枚举?

我有一个符合协议EmailVerificationStatus的关联类型的枚举:StringCodable

我正在使用的 Web 服务以大写字母 ( UNVERIFIED/ VERIFIED) 发送这些情况。我如何使用CodingKeys枚举来映射这种差异?像下面这样的东西不起作用:

0 投票
1 回答
971 浏览

swift - Swift 4 - Codable - 如何在解码时允许键的不同对象类型

我有一个 Swift 应用程序,我正在转换它以使用 Codable 协议(而不是 EVReflection,它发生了很大的变化,以至于我无法再让它工作)。当与应用服务器进行交易时,我的代码生成一个“ServerResponse”类的对象,其中包含许多变量——其中一个是“responseObject”——它可以是从用户到消息的任意数量的不同对象,或其他。因为 Codable 默认情况下不使用“decodeIfPresent”,所以我在某些事务期间遇到错误,并且必须覆盖 init(来自解码器:解码器)以防止这种情况。现在,我面临的挑战是如何让原始 JSON 字符串保持完整,以便稍后通过调用方法解码为正确的对象类型,或者进行一些其他类似的修复。底线:

如果有人有任何建议,我将不胜感激。如果有帮助,我会很乐意分享代码,但我认为不会,因为这个问题本质上是概念性的。

0 投票
6 回答
19082 浏览

uiimage - 如何使 UIImage 符合 Codable?

Swift 4 有Codable,它很棒。但UIImage默认不符合。我们怎么能做到这一点?

我试过singleValueContainerunkeyedContainer

我收到 2 个错误

  1. “必需”初始化程序必须直接在类“UIImage”中声明(而不是在扩展中)
  2. 不可失败的初始化程序不能委托给用“init?”编写的可失败初始化程序“init(data:)”

一种解决方法是使用包装器。但是还有其他方法吗?

0 投票
3 回答
3551 浏览

swift4 - Swift 4 使用 Codable 解码 json

有人可以告诉我我做错了什么吗?我已经查看了这里的所有问题,比如从这里如何使用 Swift Decodable 协议解码嵌套的 JSON 结构?我找到了一个似乎正是我需要的Swift 4 Codable 解码 json

我得到的错误是:

typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [], debugDescription: "期望解码 Array 但找到了一个字典。",底层错误: nil))

0 投票
1 回答
103 浏览

swift - 为什么 `decode(_:forKey:)` 会忽略它的第一个参数?

似乎decode(_forKey:)忽略了它的第一个参数,而是依赖泛型参数来决定要解码的类型。如果是这种情况,第一个参数是什么?

0 投票
3 回答
15183 浏览

swift - 使用 Decodable 进行 JSON 解析时 optional 和 decodeIfPresent 有什么区别?

Codable第一次使用 Swift 4 的协议,我无法理解decodeIfPresentfrom的使用Decodable

在这里它建议它返回nil,如果值不存在关联键。如果这是唯一的原因,那么它与可选属性有何不同,因为可选变量也设置为nil如果响应中不存在值。

0 投票
3 回答
1330 浏览

json - 如何解码类型取决于标签的值数组?

我有一个带有一组值的 JSON:

我想将此数组解码为structs 数组,其中特定类型取决于标签:

我怎么做?目前我有这个略显丑陋的包装:

接着:

有没有更好的办法?

0 投票
3 回答
14330 浏览

swift - 使用字典/数组初始化符合 Codable 的对象

我的用例主要是使用字典创建一个对象:例如

我想避免编写自定义实现,并希望尽可能高效。

0 投票
3 回答
1295 浏览

json - Swift 4 JSON Codable ids 作为键

我想将 Swift 4 的可编码功能与 json 一起使用,但某些键没有设置名称。而是有一个数组,它们是像

您在哪里看到 181 个 ID。有谁知道如何处理 181 以便我可以将其指定为密钥?数字可以是任何数字,并且每个数字都不同。

想要这样的东西

提前致谢。