问题标签 [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 回答
2421 浏览

ios - Swift 4 Codable:无法排除属性

我正在开发一个简单的音乐音序器应用程序。这种应用程序往往具有复杂的数据结构,必须保存/加载,所以Codable在 Swift4 中引入协议对我来说完全是一个好消息。

我的问题是:我必须有一个不可编码的属性。它不必编码,因为它是一个临时变量,仅在应用程序处于活动状态时才保持活动状态。所以我只是尝试通过实现来排除CodingKey,但编译器仍然给我错误“类型'Song'不符合协议'Decodable'”。

具体来说,我想在下面的代码中排除“musicSequence”。

有人有什么想法吗?

0 投票
1 回答
1270 浏览

swift - 可编码和自定义 Getter 构建错误

我正在使用 Codable 协议执行我的第一步,并在尝试将我的结构与自定义 getter 混合时遇到构建错误。我将如何解决这个问题。我必须编写自定义解码和编码函数吗?

在此处输入图像描述

更新:解决方法

我找到了一种解决方法,它不是最佳的,但它可以通过引入一个保存“真实”数据的私有变量来完成工作:

0 投票
2 回答
989 浏览

json - 当键仅在运行时已知时展平 JSON

假设我们有一个如下的 JSON 结构(通常用于 Firebase 的实时数据库):

预期的解决方案:

使用Decodable我想将其转换为 3 个元素的数组:

id属性对应于 json 对象的根字符串,例如:18348b9b-9a49-4e04-ac35-37e38a8db1e2.

解决方法:

我已经尝试了几种方法,但如果不需要辅助实体(或使用可选)就无法获得 id 属性:

使用init(from: Decoder)并不像在其他情况下那么简单,因为keyedContainer(,)由于密钥未知而无法使用。


Decodable适合这些类型的情况吗?

0 投票
0 回答
781 浏览

arrays - 在 Swift 4 中使用 Codable 结构解码嵌套数组仅适用于数组大小为 1

我有一个格式如下的 JSON 有效负载:

这是我用来解码有效载荷的代码:

我的 EmployeeDTO 在外部文件中也定义为 Codeable 结构。我遇到的问题是只有当我的数组只有 1 个结果时解码才有效。换句话说,一个只有 1 个 EmployeeDTO 对象的数组。一旦我有一个包含 2 个或更多对象的数组,解码就会失败并直接转到其他对象。关于为什么会发生这种情况的任何想法?我难住了。这是我一直使用的文档,用于解析带有数组的嵌套对象:http: //benscheirman.com/2017/06/ultimate-guide-to-json-parsing-with-swift-4/

0 投票
1 回答
2012 浏览

swift4 - Swift 4 的嵌套 Codable 协议

我在玩 Swift 4 和Codable一点点,并被一些嵌套协议的场景卡住了,这些协议都符合Codable.

简化示例如下所示:

此代码使用 Xcode 9 Beta 5 生成构建错误:

  • 类型“模型”不符合协议“可解码”
  • 类型“模型”不符合协议“可编码”

现在,我没想到会出现这些错误,因为我知道编译器会自动生成对这些协议的一致性,而事实上,如果没有构建错误,我什至无法手动实现这种一致性。我还尝试了几种不同的方法来解决这种嵌套模型结构,Codable但我就是无法让它工作。

我的问题:这是一个编译器错误(它仍然是测试版)还是我做错了什么?

0 投票
1 回答
612 浏览

json - json swift4如何设置结构?

我想从 http 资源中解析一个 json(这是我的路由器,所以 http 是强制性的)。

在我设置Info.plist App Security Transport我确实获得连接后,我通过第一次尝试获取数据:

第二次尝试:我也尝试过,但没有成功://我将它放入查看负载只是为了测试它!

}

控制台中的错误:

typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 25", intValue: Optional(25)), JsonParseSwift4.RouterData.(CodingKeys in _DD16AFvarBB8A755D282DC27E60A666)。 ,debugDescription:“预期解码字符串,但找到了一个数组。”,基础错误:无))

这就是来自源(路由器)的(完整)json结构

来自路由器的数据是:

JSON 只是一个片段,我想展示的是它varvalue曾经是一个字符串,一次是[]带有子数据但相同var的。

0 投票
1 回答
13355 浏览

xml - 在 Swift 4 中实现自定义解码器

我想使用DecodableSwift 4 中引入的新协议解码 XML 文档,但是,似乎没有符合该Decoder协议的 XML 解码器的现有实现。

我的计划是使用 SWXMLHash 库来解析 XML,然后可能使该XMLIndexer库中的类扩展Decoder协议,以便我的模型可以使用XMLIndexer(XMLIndexerSWXMLHash.parse(xmlString)) 的实例初始化。

XMLIndexer+Decoder.swift

我的问题是我不知道如何实现该Decoder协议,而且我似乎无法在网上找到任何资源来解释它是如何完成的。我发现的每个资源都严格提到了JSONDecoder包含在 Swift 标准库中的类,并且我发现没有任何资源可以解决创建您自己的自定义解码器的问题。

0 投票
1 回答
4197 浏览

arrays - 使用 Swift4 Codable 解码数组

我再次使用 Swift 4 Codable,就在我认为我掌握了它的窍门时,我在从响应中解码 Weather 键时遇到了这个问题。

斯威夫特模型:

我不确定我做错了什么。其他一切都完美地解码到我的模型中。只有当我尝试解码数组时。有什么建议么?

0 投票
4 回答
19758 浏览

swift - Swift 4 可编码数组

所以我有一个返回 JSON 对象数组的 API 路由。例如:

我正在尝试设想如何使用 Swift 中的新可编码功能将它们转换为一个类中的两个对象。因此,如果我有一个可编码的 person 类,我希望得到该响应并让它给我两个 person 对象。

我也在使用 Alamofire 来处理请求。

我怎样才能做到这一点?到目前为止,我所看到的与可编码内容相关的所有内容都只允许 1 个对象。而且我还没有看到与 Alamofire 或 Web 框架的任何集成。

0 投票
1 回答
611 浏览

swift - 具有闭包属性的 Swift 4.0 解码器错误

我正在尝试使用 Swift 4.0 Codable 协议序列化我的对象。尝试解码闭包属性时遇到错误:

我想这是可以理解的,但肯定有一些我可以使用的策略(毕竟,函数是一流的对象,对吧?)。我必须以某种方式包装我的闭包吗?