问题标签 [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.
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)有没有一种方法可以只提取data
JSON响应的“”部分作为Data
类型,这样我就可以解码User
对象而不必给它一个status
和data
属性?
swift - 无法使用 Swift Codable 解析响应
无法使用Decodable解码来自服务器的 json 响应 将不胜感激帮助或建议
JSON: *
//响应在数组字典中
代码:
json - 忽略不支持的解码器
我一直Codable
很高兴在我当前的项目中使用 s - 一切都很好,我开箱即用的大部分东西都是内置的 - 完美!不过,最近我偶然发现了第一个真正的问题,无法按照我想要的方式自动解决。
问题描述
我有一个来自后端的 JSON,它是一个嵌套的东西。看起来像这样
Chapter是根对象,它包含一个Topics列表,每个主题都包含一个Elements列表。非常简单,但我被最低级别的Elements卡住了。每个Element都有一个来自后端的枚举,如下所示:
[ video, challenge, text_image ]
,但 iOS 应用程序不支持挑战,因此我在 Swift 中的ElementType枚举如下所示:
当然,它throws
,因为发生的第一件事是它试图解码challenge
这个枚举的值并且它不存在,所以我的整个解码失败了。
我想要
的
只是希望解码过程忽略 Element
无法解码的 s 。我不需要任何Optional
s。我只是希望它们不会出现在 Topic 的元素数组中。
我的推理和它的缺点
当然,我已经做了几次尝试来解决这个问题。第一个,最简单的只是标记ElementType
为Optional
,但是稍后使用这种方法我将不得不打开所有内容并处理它 - 这是一项相当乏味的任务。我的第二个想法是.unsupported
在我的枚举中有类似 case 的东西,但是稍后我想用它来生成单元格,我将不得不throw
或返回Optional
- 基本上,与以前的想法相同的问题。我的最后一个想法,但我还没有测试过,是编写一个init()
可解码的自定义并以某种方式在那里处理它,但我不确定它是否Element
应该Topic
对此负责?如果我把它写进去Element
,我不能返回任何东西,我将不得不throw
,但如果我把它放进去,Topic
我必须append
成功地将元素解码为数组。问题是,如果在某个时候我将直接获取,将会发生什么- 再次,如果没有ing Elements
,我将无法做到这一点。throw
TL;DR
我不想init(from decoder: Decoder) throws
,throw
但要返回Optional
。
json - 在 Swift 中解码不同类型的 JSON 数组
我正在尝试解码以下 JSON 对象
struct userObject { 变量名称:字符串变量年龄:整数 }
基本上是具有两种不同对象类型的 JSON 数组
和一个“1”:数组[userObjects]
提前致谢
swift - 与枚举类型的属性的可解码一致性
我有这个枚举:
和结构:
在结构中,我试图将枚举分配为dealStatus
这样的类型:
但我收到一些编译器错误:
类型“ActiveDeals”不符合协议“可解码”
协议需要初始化器 'init(from:)' 类型为 'Decodable' (Swift.Decodable)
无法自动合成“Decodable”,因为“DealStatus”不符合“Decodable”
ios - 使用 Decodable 解析数组
这是我试图解析并想了解容器概念的 JSON。
这就是我正在尝试使用我的代码。我还制作了一个用于slots
确认可解码协议的结构。解析时出现此错误Expected to decode Dictionary<String, Any> but found an array instead
。请给我使用覆盖可解码协议的解决方案。当解码器尝试解码结果时,此行发生错误。
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)
什么?
ios - Swift 可解码传播 userInfo
我有以下型号:
当然,模型要复杂得多,但这足以解释我的问题:)
另外,请不要介意编码键和图像 URL,这只是为了表明对于不同的序列化类型,它的初始化方式不同。
获取产品详细信息时,我有:
Shop
但是当我在初始化用户信息时尝试传递序列化类型时,JsonDecoder
如下所示:
在Product
初始化程序中,用户信息为空。
我的问题是如何将序列化类型从 传播Shop
到 ,Product
以便我可以使用正确的序列化类型正确解码它?
json - 使用 Swift 4 Decodable 解析具有混合属性值的 JSON
我正在尝试更新我的应用程序以使用 Swift 4 Decodable - 并且正在从具有子值的 JSON api 中提取数据,这些子值可能是:
- 子对象
- 一个字符串
- 一个整数
这是 Json Api 响应:
我尝试使用以下方法对其进行解析:如果我只引用都是字符串的 id 和 key 属性,则该方法有效。
如何将字段对象解码为我的结构?
json - Swift 4 Decodable - 带有对象的数组
我正在使用一个看起来与此非常相似的 API:
我一直在解码这个 JSON 结果,尤其是。settings
. 有人可以帮我怎么做吗?
这是我到目前为止所拥有的: