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

ios - 如何将 Codable 协议与引用类型一起使用?

例子:

输出:

如何将 Codable 协议与引用类型一起使用?

这种行为将来可能会改变吗?https://github.com/apple/swift-evolution/blob/master/proposals/0167-swift-encoders.md

0 投票
7 回答
61073 浏览

json - 使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?

Swift 4 添加了新Codable协议。当我使用JSONDecoder它时,它似乎要求我的类的所有非可选属性Codable在 JSON 中都有键,否则它会引发错误。

让我的类的每个属性都是可选的似乎是不必要的麻烦,因为我真正想要的是使用 json 中的值或默认值。(我不希望该属性为零。)

有没有办法做到这一点?

0 投票
1 回答
830 浏览

json - 如何使用 Decodable 协议将此 JSON 转换为 Swift 结构?

注意:我已经看过这个问题 ->如何在 Swift 4 的可解码协议中使用自定义键?但它没有解释如何编码/解码枚举

这是我想要的结构:

现在我知道我希望我的结构看起来如何,问题是:

  1. 我不知道枚举init内部的函数应该是什么样子。PostType

我使用下面的代码来帮助我快速构建 JSON。

谁能帮我这个?

Edit1我的 JSON 看起来像这样

中应该是什么init样子的PostType enum

0 投票
8 回答
23378 浏览

json - Swift 4 JSON Decodable 解码类型更改的最简单方法

使用 Swift 4 的 Codable 协议,可以实现高水平的底层日期和数据转换策略。

给定 JSON:

我想将其强制转换为以下结构

日期解码策略可以将基于字符串的日期转换为日期。

有没有什么东西可以用基于字符串的浮点数来做到这一点

否则,我一直坚持使用 CodingKey 引入字符串并使用计算获取:

这种方式让我做的维护比看起来应该需要的要多。

这是最简单的方式,还是有类似于 DateDecodingStrategy 的其他类型转换的方法?

更新:我应该注意:我也走了重写路线

但这是相反的方向,因为它迫使我为自己做这一切。

0 投票
1 回答
2095 浏览

json - 在 Swift 4 中,如何使用 Codable 解码 JSON 并在解码后的对象之间创建引用?

Codable在创建对象(不是结构)时,如何使用它们来解码 JSON 并交叉引用它们?在此示例中,我希望Painting该类具有Color也在 JSON 中定义的对象数组。(我也希望能够将它们编码回 JSON。)

奖励:在这种情况下,我更愿意Painting.colors成为非可选let属性而不是 var. 我不希望它在创建后改变,我也不希望它永远为零。(我宁愿使用空数组的默认值而不是 nil。)

我考虑过的一些方法:

  • 手动编码/解码json。似乎需要做很多额外的工作,但也许它给了我所需的控制权?

  • 将 JSON 解码分解为多个步骤。将 JSON 反序列化为字典,首先提取并解码颜色,然后是绘画(可以访问上下文中的颜色)。这感觉就像是在与Codable想要你一次使用Data而不是Dictionary.

  • 通过动态属性在运行时Painting动态查找s。Color但我更愿意在开始真正的工作之前设置和验证所有对象关系,然后再不改变。但也许这将是最简单的?

  • 不使用可编码

  • 其他一些坏主意

0 投票
16 回答
117212 浏览

json - 如何在 Swift [45] 可解码协议中解码 JSON 字典类型的属性

假设我的Customer数据类型包含一个metadata属性,该属性可以包含客户对象中的任何 JSON 字典


metadata属性可以是任意 JSON 地图对象。

NSJSONDeserialization在我可以使用新的 Swift 4协议从反序列化 JSON 中转换属性之前Decodable,我仍然想不出一种方法来做到这一点。

有谁知道如何在 Swift 4 中使用 Decodable 协议来实现这一点?

0 投票
7 回答
48544 浏览

json - 如何从 Swift Codable 中排除属性?

与 Swift 4 一起发布的Swift 的Encodable/Decodable协议使 JSON(反)序列化非常愉快。但是,我还没有找到一种方法来细粒度地控制哪些属性应该被编码,哪些应该被解码。

我注意到从随附的CodingKeys枚举中排除该属性会完全将该属性排除在进程之外,但是有没有办法进行更细粒度的控制?

0 投票
9 回答
17377 浏览

swift - Swift 的 JSONDecoder 在 JSON 字符串中有多种日期格式?

SwiftJSONDecoder提供了一个dateDecodingStrategy属性,它允许我们定义如何根据DateFormatter对象来解释传入的日期字符串。

但是,我目前正在使用一个返回日期字符串 ( yyyy-MM-dd) 和日期时间字符串 () 的 API yyyy-MM-dd HH:mm:ss,具体取决于属性。有没有办法JSONDecoder处理这个,因为提供的DateFormatter对象一次只能处理一个dateFormat

一个笨拙的解决方案是重写随附的Decodable模型以仅接受字符串作为它们的属性并提供公共Dategetter/setter 变量,但这对我来说似乎是一个糟糕的解决方案。有什么想法吗?

0 投票
1 回答
1329 浏览

ios - 除非嵌套是数组,否则 Swift `Decodable` 不适用于嵌套的 JSON 对象

我已经开始转换一些 JSON 解析代码以使用新的 AppleDecodable协议,并且遇到了一个在 Apple 测试期间感觉太基本以至于无法错过的阻止程序,所以我想知道我是否在做一些愚蠢的事情。简而言之,我正在尝试解析这样的 JSON 图,因为我只是在解码,所以我认为符合 Decodable 应该就足够了,但从错误看来,我需要符合 Codable (Decodable & Encodable) 以获得所需解码效果:

它适用于这种情况:

as 是嵌套对象的数组,但不是单个对象。

这是一个 Swift 错误还是我做错了什么?

这是一个可以证明问题的示例游乐场。如果 Animal 类符合Decodable它不会解析数组案例,但如果我将 Animal 设置为符合,Codable那么它确实有效。我不希望会出现这种情况,因为我在这里只解码 JSON。

0 投票
4 回答
19004 浏览

json - Swift 4 可编码;如何使用单个根级密钥解码对象

我正在使用Codable带有 JSON 数据的 Swift 4 协议。我的数据被格式化为在根级别有一个键,其对象值包含我需要的属性,例如:

我有一个User可以解码user密钥的结构:

由于idusername是 的属性user,而不是在根级别,我需要像这样创建一个包装器类型:

然后我可以通过 解码 JSON UserWrapper,并且User也被解码。看起来有很多冗余代码,因为我需要对我拥有的每种类型都进行额外的包装。有没有办法避免这种包装模式或更正确/优雅的方式来处理这种情况?