问题标签 [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.
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 时它崩溃了
解码器这样调用
并崩溃:
swift4 - 在 ios9.3 的 swift4.0 中使用 NSKeyedArchiver 归档 CMTime 时出错
以下代码archivedTimes()在 swift4 中成功构建。它在安装了 ios10.3 的设备上运行良好。
但是,在安装了 ios9.3 的设备上运行它时,它会崩溃说:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[NSKeyedArchiver encodeValueOfObjCType:at:]:此归档程序无法编码结构”
我的猜测是,这可能与新的 Codable 协议和旧的 NSCoder 协议之间的某些冲突有关。但我不知道是什么!
请注意,该问题与数组无关。因为归档一个简单的 CMTime 也会导致这样的错误。但是,我这样发布它,因为归档 CMTime 数组最终是我的目标。
swift - 如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?
我需要帮助解决错误:
无法使用类型为“(项目:[String],看到:Int)”的参数列表调用类型“QuotesViewController.RandomItems”的初始化程序
这是我的代码:
ios - 如何从 iOS 应用程序中的 Node.js 服务器获取响应?
我有一个 Node.js 服务器,它在用户登录时发送 JWT(JSON Web 令牌)作为响应。如何在我的 Swift 4、iOS 应用程序中获得响应?
它将用户名和密码发送到服务器,但我该怎么做才能得到响应?响应是一个 JWT 令牌,我如何以及在哪里存储它?
这是结构。
swift - 我如何必须使用 UserDefaults 来保存和加载我的结构?
我是编程新手。我已经创建了一个Codable
类型,但我不知道我必须在viewWillDisappear
应该保存结构UserDefaults
的函数中放入什么,以及我必须在viewDidAppear
应该再次显示保存的结构的函数中放入什么。
到目前为止,这是我的代码:
ios - 制作符合 Codable 的对象的(深层)副本
我有一个从 Realm 子类化的对象Object
,并且符合以便Codable
在与 API 交谈时转换为 JSON 和从 JSON 转换。
如何利用该Codable
协议进行深层复制(包括子对象)?
ios - Swift 4 Codable:将 JSON 返回字符串转换为 Int/Date/Float
我正在经历一些项目并删除 JSON 解析框架,因为使用 Swift 4 似乎很简单。我遇到了这个奇怪的 JSON return where Ints
and Dates
are returned as Strings
.
我查看了GrokSwift 的 Parsing JSON with Swift 4,Apple 的网站,但我没有看到任何跳出来的东西:改变类型。
Apple 的示例代码显示了如何更改键名,但我很难弄清楚如何更改键类型。
这是它的样子:
我曾经CodingKey
将字典键重命名为符合 Swift 的条目,如下所示:
那仍然让我String
觉得应该是Int
or Date
。我将如何使用 Codable 协议将包含Int/Date/Float
as a的 JSON 返回转换String
为 an ?Int/Date/Float
ios - 当数组中的一项引发 DecodingError 时,Swift 4 解码数组的其余部分
如果其中一个对象抛出 DecodingError,是否可以返回成功解码的数组对象?我正在与一个相当复杂的 API 进行通信,它间歇性地向我发送一些格式错误的 JSON,这会导致抛出 DecodingError 并且整个对象数组(包括有效条目)没有被解析。
我不知道是否有某种方法可以手动完成,但是给定一个包含一些 duff 数据的 JSON 数组,我想以某种方式仍然可以获取可以成功解码的对象。
编辑:根据要求,代码示例:
显然是一个人为的例子,但希望能说明我的观点。如果响应数组中的对象缺少强制属性,那么我希望将该对象从解码对象列表中删除,而不是轰炸并返回任何内容。
这也适用于所有其他 DecodingErrors(dataCorrupted、typeMismatch、valueNotFound)。
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
对象的可靠方法吗?
swift - 在 Swift 4 中解码没有实际映射的可选字典
我有一个结构,其中包含一个可选的元数据类型字段[String: Any]?
。我想将 JSON 解析为该结构,并明确不映射字典,而是保持原样。
该代码编译并启动,但在运行时失败。我想这[String: Any]
不是我可以在这里使用的有效类型。但是那我该怎么做呢?