问题标签 [decodable]

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 投票
4 回答
2376 浏览

ios - 如何在 Swift4 中验证这个 JSON?

有一个 API,它将其响应包装在一个带有status值和data值的关联数组中,其中data包含错误对象或预期值:

不良反应:

成功响应:

我想验证这些响应:

尝试解码带有错误的响应对象时总是失败:Expected to decode Data but found a dictionary instead.我在想我可以将data对象解码为 Swift 类型Data,但它实际上是一个[String: Any]字典。

1) 如何验证Data我从 API 收到的信息?

2)有没有一种方法可以只提取dataJSON响应的“”部分作为Data类型,这样我就可以解码User对象而不必给它一个statusdata属性?

0 投票
1 回答
787 浏览

swift - 无法使用 Swift Codable 解析响应

无法使用Decodable解码来自服务器的 json 响应 将不胜感激帮助或建议

JSON: *

//响应在数组字典中

代码:

0 投票
2 回答
218 浏览

json - 忽略不支持的解码器

我一直Codable很高兴在我当前的项目中使用 s - 一切都很好,我开箱即用的大部分东西都是内置的 - 完美!不过,最近我偶然发现了第一个真正的问题,无法按照我想要的方式自动解决。


问题描述
我有一个来自后端的 JSON,它是一个嵌套的东西。看起来像这样

Chapter是根对象,它包含一个Topics列表,每个主题都包含一个Elements列表。非常简单,但我被最低级别的Elements卡住了。每个Element都有一个来自后端的枚举,如下所示: [ video, challenge, text_image ],但 iOS 应用程序不支持挑战,因此我在 Swift 中的ElementType枚举如下所示:

当然,它throws,因为发生的第一件事是它试图解码challenge这个枚举的值并且它不存在,所以我的整个解码失败了。

我想要
的 只是希望解码过程忽略 Element无法解码的 s 。我不需要任何Optionals。我只是希望它们不会出现在 Topic 的元素数组中。

我的推理和它的缺点
当然,我已经做了几次尝试来解决这个问题。第一个,最简单的只是标记ElementTypeOptional,但是稍后使用这种方法我将不得不打开所有内容并处理它 - 这是一项相当乏味的任务。我的第二个想法是.unsupported在我的枚举中有类似 case 的东西,但是稍后我想用它来生成单元格,我将不得不throw或返回Optional- 基本上,与以前的想法相同的问题。我的最后一个想法,但我还没有测试过,是编写一个init()可解码的自定义并以某种方式在那里处理它,但我不确定它是否Element应该Topic对此负责?如果我把它写进去Element,我不能返回任何东西,我将不得不throw,但如果我把它放进去,Topic我必须append成功地将元素解码为数组。问题是,如果在某个时候我将直接获取,将会发生什么- 再次,如果没有ing Elements,我将无法做到这一点。throw

TL;DR
我不想init(from decoder: Decoder) throwsthrow但要返回Optional

0 投票
2 回答
5109 浏览

json - 在 Swift 中解码不同类型的 JSON 数组

我正在尝试解码以下 JSON 对象

struct userObject { 变量名称:字符串变量年龄:整数 }

基本上是具有两种不同对象类型的 JSON 数组

和一个“1”:数组[userObjects]

提前致谢

0 投票
3 回答
4069 浏览

swift - 与枚举类型的属性的可解码一致性

我有这个枚举:

和结构:

在结构中,我试图将枚举分配为dealStatus这样的类型:

但我收到一些编译器错误:

类型“ActiveDeals”不符合协议“可解码”

协议需要初始化器 'init(from:)' 类型为 'Decodable' (Swift.Decodable)

无法自动合成“Decodable”,因为“DealStatus”不符合“Decodable”

0 投票
1 回答
531 浏览

ios - 使用 Decodable 解析数组

这是我试图解析并想了解容器概念的 JSON。

这就是我正在尝试使用我的代码。我还制作了一个用于slots确认可解码协议的结构。解析时出现此错误Expected to decode Dictionary<String, Any> but found an array instead。请给我使用覆盖可解码协议的解决方案。当解码器尝试解码结果时,此行发生错误。

0 投票
1 回答
3745 浏览

swift - 如何扩展 Date 和其他内置类型的 Codable 功能?

我正在尝试扩展功能Date.init(from:Decoder)以处理从我的服务器传递的不同格式。有时日期将被编码为字符串,有时该字符串嵌套在字典中。根据 Swift 来源,Date解码/编码如下:

因此,我尝试按如下方式扩展该功能:

然而,这个函数永远不会被调用。然后我尝试扩展KeyedDecodingContainer以更改Date解码decode(_:forKey)如下:

但是,当调用它来解码Date我通过调用编码的a 时container.encode(date, forKey: .date),我收到一个typeMismatch错误,即数据不是 a Double。我完全不知道发生了什么,因为encode(to:)函数Date显式地编码了一个 Double。我尝试通过 Swift 源代码中的调用来追踪我的方式decode,但它似乎从来没有调用Date.init(from:Decoder).

所以我想知道,是否可以Date通过这种扩展来改变类型的解码方式?我唯一的选择是Date在每个模型中复制我的自定义解码吗?到底叫init(from:Decoder)什么?

0 投票
0 回答
1462 浏览

ios - Swift 可解码传播 userInfo

我有以下型号:

当然,模型要复杂得多,但这足以解释我的问题:)

另外,请不要介意编码键和图像 URL,这只是为了表明对于不同的序列化类型,它的初始化方式不同。

获取产品详细信息时,我有:

Shop但是当我在初始化用户信息时尝试传递序列化类型时,JsonDecoder如下所示:

Product初始化程序中,用户信息为空。

我的问题是如何将序列化类型从 传播Shop到 ,Product以便我可以使用正确的序列化类型正确解码它?

0 投票
1 回答
158 浏览

json - 使用 Swift 4 Decodable 解析具有混合属性值的 JSON

我正在尝试更新我的应用程序以使用 Swift 4 Decodable - 并且正在从具有子值的 JSON api 中提取数据,这些子值可能是:

  • 子对象
  • 一个字符串
  • 一个整数

这是 Json Api 响应:

我尝试使用以下方法对其进行解析:如果我只引用都是字符串的 id 和 key 属性,则该方法有效。

如何将字段对象解码为我的结构?

0 投票
1 回答
3204 浏览

json - Swift 4 Decodable - 带有对象的数组

我正在使用一个看起来与此非常相似的 API:

我一直在解码这个 JSON 结果,尤其是。settings. 有人可以帮我怎么做吗?

这是我到目前为止所拥有的: