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

json - 如何将 Swift 4 编码的 JSON 写入文件?

如何将通过 Swift 4 Codable 协议编码的 JSON 对象写入文件?在 Swift 4 之前我使用过JSONSerialization.writeJSONObject,但JSONSerialization.isValidJSONObject现在返回false创建的数据(或字符串)。一个例子:

这两种格式都无效JSONSerialization.isValidJSONObject()

数据不是 JSON 序列化的有效格式:
{"numOfTeeth":48,"hobbies":["Dancing","Swiming","Eating people"],"name":"Nancy","carnivorous":true}
数据不是 JSON 序列化的有效格式:可选(99 字节)

如何让它通过 JSON 验证,然后将其写入文件?

0 投票
2 回答
2768 浏览

swift - Swift 4 解码简单的根级 json 值

根据 JSON 标准RFC 7159,这是有效的 json:

如何使用 swift4 的可解码将其解码为 Int?这不起作用

0 投票
2 回答
283 浏览

ios - 解码子类时忽略超类属性

我正在尝试制作继承的数据模型以便用JSONDecoder.

我将此 JSON 用于FirstClass

这对于SecondClass

如果关键字在这种情况下不起作用,我怎样才能摆脱arrayOfInts我的子类但让它在超类中?final

这里是游乐场。感谢您的回答!

0 投票
1 回答
186 浏览

json - 如何使用 Codable 协议快速构建 json 对象模型

我正在编写一个 REST Web 应用程序客户端,并使用如下所示的 JSON:

JSON1

但是 API 也可以给我这种 JSON

JSON2

所以现在在我的应用程序中,我创建了一个符合 Codable 协议的结构

这种架构有效,但在我看来它不是最好的或优雅的。你知道是否存在更好的方法吗?我是否应该使用 2 个不同的 json 模型,例如:

我是 REST API 客户端的新手,这种 JSON 似乎没有使用好的架构。

0 投票
1 回答
2751 浏览

ios - Swift 4 Decodable,DecodingError:没有与键关联的值

我正在尝试使用 Swift 4 Codable 功能,但陷入了这种情况:

这是我的结构。

这是我用于发布请求的功能。在 print("NewPost:",newPost) 中,它打印

这看起来与我看到的其他示例非常相似,但是通过 catch 总是有一个会话错误

我只是不明白这是怎么出现的!我正在使用完全相同的结构,它说这个没有密钥?!谢谢你的帮助!

0 投票
1 回答
21660 浏览

ios - Swift 4 Decodable:给定的数据不是有效的 JSON

我正在尝试向本地服务器写入 POST 请求,这是我的功能:

这些是这里使用的结构:

它能够打印

但它一直显示这个错误:

会话错误:dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON。”,基础错误:可选(错误域=NSCocoaErrorDomain代码=3840“JSON文本没有以数组或对象开头以及允许未设置片段的选项。" UserInfo={NSDebugDescription=JSON 文本未以数组或对象开头,以及允许未设置片段的选项。})))

为什么它不是一个有效的 JSON ???

这是我服务器的 API POST 请求文档:

我已经做了很多谷歌搜索,但被困在这里很长时间了!任何帮助表示赞赏!

0 投票
1 回答
686 浏览

swift - 在 Swift 中 JSONDecoder 解码一个巨大的对象时更新进度条

我正在像这样解码几千兆字节的 JSON 编码数据

content纯文本在哪里。现在,此操作可能需要几分钟,具体取决于 的大小content,我想展示一些进展。这是一个命令行程序,所以即使是定期更新长度table也足够了。问题是我没有看到类似回调或类似的东西。Timer我尝试过这样一个相当尴尬的

但这只运行一次——是因为解码器阻塞了主线程而我在同一个线程中运行计时器吗?我对 GCD 有点陌生,所以我不知道如何使用 a 来做DispatchQueue这个。

有任何想法吗?

0 投票
1 回答
9005 浏览

json - 忽略 Codable 对象中的非 Codable 可选属性

符合Codable协议时,我不能轻易跳过非 Codable 类的可选属性

Ridestruct 中,我们想跳过属性的编码解码driver而在解码时只保留它nil

在这种情况下,我得到一个编译错误

类型“驱动程序”不符合协议“可解码”

到目前为止,我提供的唯一解决方案是通过提供以下方法手动编码和解码:

还有另一种跳过可选属性的方法吗?使用更大的模型会容易得多。

0 投票
2 回答
954 浏览

json - 在 Swift 4 中使用 Decodable 和 CodingKeys 解析 JSON

我正在尝试解析从 URL 检索的大型 JSON 字符串。我用来测试的 JSON 如下:

我有几个数据结构可以将数据放入:

然后我打印出这样的信息:

它可以成功打印除类型之外的所有信息。这给了我一系列流派,但我无法 book.genres.name 访问该名称。我必须使用: book.genres[0] 它只给我第一个索引的结果。

有没有办法可以在我的BookCollection扩展中完善我的 JSON 解码然后使用book.genres.name

谢谢

0 投票
1 回答
2316 浏览

swift - Swift 4 中 Codable 协议的自定义字典编码器和解码器

如果我有一个符合Codable协议的结构,如下所示:

如何创建一个编码器和一个解码器,将其编码/解码到/从这样的类型实例Dictionary<String, Any?>

注意:我知道在将结果转换为字典对象之前可以使用JSONEncoderandJSONDecoder类,但出于效率原因,我不希望这样做。

Swift 标准库带有开箱即用的JSONEncoderJSONDecoder以及PListEncoder和类,它们分别符合和协议。PListDecoderEncoderDecoder

我的问题是我不知道如何为我的自定义编码器和解码器类实现这些协议:

由于 Swift 是开源的,因此可以在标准库中查看JSONEncoderPListEncoder类的源代码,但是由于缺少文档,除了一些注释之外,源文件非常庞大且难以理解。