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

ios - 可解码多个 DateDecodingStrategies

是否有可能将多个添加JSONDecoder.DateDecodingStrategy到同一个JSONDecoder

我有一个可解码的:

现在我遇到了一个问题,因为 API 提供了不同的日期格式。对于 pulicaion_date、opening_date,使用以下模式 2017-10-10。

但是对于 date_updated,他们发送的数据格式类似于 2017-10-10 12:21:02。

当我将DateDecodingStrategy.formatted JSONDecoder(myDateFormatter) 设置为 date_updated 时它崩溃了

解码器这样调用

并崩溃:

0 投票
1 回答
233 浏览

swift4 - 在 ios9.3 的 swift4.0 中使用 NSKeyedArchiver 归档 CMTime 时出错

以下代码archivedTimes()在 swift4 中成功构建。它在安装了 ios10.3 的设备上运行良好。

但是,在安装了 ios9.3 的设备上运行它时,它会崩溃说:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[NSKeyedArchiver encodeValueOfObjCType:at:]:此归档程序无法编码结构”

我的猜测是,这可能与新的 Codable 协议和旧的 NSCoder 协议之间的某些冲突有关。但我不知道是什么!

请注意,该问题与数组无关。因为归档一个简单的 CMTime 也会导致这样的错误。但是,我这样发布它,因为归档 CMTime 数组最终是我的目标。

0 投票
1 回答
1665 浏览

swift - 如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?

我需要帮助解决错误:

无法使用类型为“(项目:[String],看到:Int)”的参数列表调用类型“QuotesViewController.RandomItems”的初始化程序

这是我的代码:

0 投票
2 回答
586 浏览

ios - 如何从 iOS 应用程序中的 Node.js 服务器获取响应?

我有一个 Node.js 服务器,它在用户登录时发送 JWT(JSON Web 令牌)作为响应。如何在我的 Swift 4、iOS 应用程序中获得响应?

它将用户名和密码发送到服务器,但我该怎么做才能得到响应?响应是一个 JWT 令牌,我如何以及在哪里存储它?

这是结构。

0 投票
2 回答
1497 浏览

swift - 我如何必须使用 UserDefaults 来保存和加载我的结构?

我是编程新手。我已经创建了一个Codable类型,但我不知道我必须在viewWillDisappear应该保存结构UserDefaults的函数中放入什么,以及我必须在viewDidAppear应该再次显示保存的结构的函数中放入什么。

到目前为止,这是我的代码:

0 投票
1 回答
1993 浏览

ios - 制作符合 Codable 的对象的(深层)副本

我有一个从 Realm 子类化的对象Object,并且符合以便Codable在与 API 交谈时转换为 JSON 和从 JSON 转换。

如何利用该Codable协议进行深层复制(包括子对象)?

0 投票
2 回答
8516 浏览

ios - Swift 4 Codable:将 JSON 返回字符串转换为 Int/Date/Float

我正在经历一些项目并删除 JSON 解析框架,因为使用 Swift 4 似乎很简单。我遇到了这个奇怪的 JSON return where Intsand Datesare returned as Strings.

我查看了GrokSwift 的 Parsing JSON with Swift 4Apple 的网站,但我没有看到任何跳出来的东西:改变类型。

Apple 的示例代码显示了如何更改键名,但我很难弄清楚如何更改键类型。

这是它的样子:

我曾经CodingKey将字典键重命名为符合 Swift 的条目,如下所示:

那仍然让我String觉得应该是Intor Date。我将如何使用 Codable 协议将包含Int/Date/Floatas a的 JSON 返回转换String为 an ?Int/Date/Float

0 投票
2 回答
856 浏览

ios - 当数组中的一项引发 DecodingError 时,Swift 4 解码数组的其余部分

如果其中一个对象抛出 DecodingError,是否可以返回成功解码的数组对象?我正在与一个相当复杂的 API 进行通信,它间歇性地向我发送一些格式错误的 JSON,这会导致抛出 DecodingError 并且整个对象数组(包括有效条目)没有被解析。

我不知道是否有某种方法可以手动完成,但是给定一个包含一些 duff 数据的 JSON 数组,我想以某种方式仍然可以获取可以成功解码的对象。

编辑:根据要求,代码示例:

显然是一个人为的例子,但希望能说明我的观点。如果响应数组中的对象缺少强制属性,那么我希望将该对象从解码对象列表中删除,而不是轰炸并返回任何内容。

这也适用于所有其他 DecodingErrors(dataCorrupted、typeMismatch、valueNotFound)。

0 投票
1 回答
2756 浏览

json - 比较可编码转换前后的 JSON 数据

我有Data一个包含来自服务器的 JSON 响应的对象。

它以Codable这种方式转换为某个对象:

出于测试目的,我想将此对象结束编码Data,然后与 initial 进行比较Data

第一个假设:如果Data解码+编码后对象相等,则意味着所有字段都正确列在 my 中Codable struct,所有字段都具有有效类型等...转换后我有两个Data对象:154362 字节 154435 字节。这意味着它们是不同的。但是当我使用jsondiff.com比较它们时,它们似乎是 100% 相同的。

第二个假设:我试图将数据对象转换为字符串,但 JSON 结构以不同的方式排序......所以这种方式不起作用。

Double/Float值存在一些问题。它们在解码过程中以这种方式解释:41.01结果为41.009999999

所以问题是:有没有办法验证两个 JSON 对象在解码 + 编码前后是否相同?

当前解决方案:我决定JSONSerialization尝试一下,因为从 iOS 11 开始,它有一个很好的写作选择:

这样我转换Data为正确排序的json:

这是比较两个jsonData对象的可靠方法吗?

0 投票
1 回答
444 浏览

swift - 在 Swift 4 中解码没有实际映射的可选字典

我有一个结构,其中包含一个可选的元数据类型字段[String: Any]?。我想将 JSON 解析为该结构,并明确不映射字典,而是保持原样。

该代码编译并启动,但在运行时失败。我想这[String: Any]不是我可以在这里使用的有效类型。但是那我该怎么做呢?