- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 Codable 类解析 API 响应。
下面是回复:
{"status":200,"message":"","success":1,"data":[{"event_id":"26","event_name":"Mens Night","event_desc":"Hot Mens Night","from_date":"2019-02-08","to_date":"2019-03-09","bar_id":"62","bar_names":"Autumn Bar & Bistro","bar_ids":"62","offer_image":"https:\/\/www.tippler.app\/manager\/uploads\/events\/mens_night.jpg","from_time":"19:00:00","to_time":"01:30:00"},{"event_id":"36","event_name":"Karaoke Night","event_desc":"Karaoke NIght with Brian Rub","from_date":"2019-02-08","to_date":"2019-02-09","bar_id":"146","bar_names":"Amuse Resto Bar","bar_ids":"146","offer_image":"https:\/\/www.tippler.app\/manager\/uploads\/events\/Screenshot_20190208-155223__011.jpg","from_time":"21:00:00","to_time":"01:00:00"},{"event_id":"37","event_name":"Sufi Nights","event_desc":"Singers From mumbai","from_date":"2019-02-08","to_date":"2019-02-09","bar_id":"66","bar_names":"Cavalry The Lounge","bar_ids":"66","offer_image":"https:\/\/www.tippler.app\/manager\/uploads\/events\/SUFI-FEATURED.jpg","from_time":"20:00:00","to_time":"01:30:00"},{"event_id":"39","event_name":"BOLLYWOOD NIGHT","event_desc":"BHANGRA AND LIVE DHOL","from_date":"2019-02-09","to_date":"2019-02-10","bar_id":"103","bar_names":"B Desi","bar_ids":"103","offer_image":"https:\/\/www.tippler.app\/manager\/uploads\/events\/bollywood-nights-1.jpg","from_time":"21:00:00","to_time":"01:00:00"}],"error_dev":""}
I Codable 类是:
struct Events: Codable {
var event_id: String
var event_name: String
var event_desc: String
var from_date: String
var to_date: String
var bar_id: String
var bar_names: String
var bar_ids: String
var offer_image: String
var from_time: String
var to_time: String
enum CodingKeys: String, CodingKey {
case event_id = "event_id"
case event_name = "event_name"
case event_desc = "event_desc"
case from_date = "from_date"
case to_date = "to_date"
case bar_id = "bar_id"
case bar_names = "bar_names"
case bar_ids = "bar_ids"
case offer_image = "offer_image"
case from_time = "from_time"
case to_time = "to_time"
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(event_id, forKey: .event_id)
try container.encode(event_name, forKey: .event_name)
try? container.encode(event_desc, forKey: .event_desc)
try? container.encode(from_date, forKey: .from_date)
try container.encode(to_date, forKey: .to_date)
try container.encode(bar_id, forKey: .bar_id)
try container.encode(bar_names, forKey: .bar_names)
try container.encode(bar_ids, forKey: .bar_ids)
try container.encode(offer_image, forKey: .offer_image)
try container.encode(from_time, forKey: .from_time)
try container.encode(to_time, forKey: .to_time)
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
event_id = try values.decode(String.self, forKey: .event_id)
event_name = try values.decode(String.self, forKey: .event_name)
event_desc = try values.decode(String.self, forKey: .event_desc)
from_date = try values.decode(String.self, forKey: .from_date)
to_date = try values.decode(String.self, forKey: .to_date)
bar_id = try values.decode(String.self, forKey: .bar_id)
bar_names = try values.decode(String.self, forKey: .bar_names)
bar_ids = try values.decode(String.self, forKey: .bar_ids)
offer_image = try values.decode(String.self, forKey: .offer_image)
from_time = try values.decode(String.self, forKey: .from_time)
to_time = try values.decode(String.self, forKey: .to_time)
}
}
它正在返回响应错误
keyNotFound(CodingKeys(stringValue: "event_id", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys>(stringValue: "data", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"event_id\", intValue: nil) (\"event_id\").", underlyingError: nil))
请给我建议解决方案。
最佳答案
您的可编码结构与响应不匹配,因为它们具有状态、消息成功和 errorDev 键
试试这个
struct Response: Codable {
let status: Int?
let message: String?
let success: Int?
let data: [Events]?
let errorDev: String?
enum CodingKeys: String, CodingKey {
case status, message, success, data
case errorDev = "error_dev"
}
}
struct Events: Codable {
let eventID, eventName, eventDesc, fromDate: String?
let toDate, barID, barNames, barIDs: String?
let offerImage: String?
let fromTime, toTime: String?
enum CodingKeys: String, CodingKey {
case eventID = "event_id"
case eventName = "event_name"
case eventDesc = "event_desc"
case fromDate = "from_date"
case toDate = "to_date"
case barID = "bar_id"
case barNames = "bar_names"
case barIDs = "bar_ids"
case offerImage = "offer_image"
case fromTime = "from_time"
case toTime = "to_time"
}
}
编辑
我可以为您提供更通用的解决方案。假设所有 API 都有相同的响应但只有 data
那时 key 不一样
struct GeneralResponse<T:Codable>: Codable {
let status: Int?
let message: String?
let success: Int?
let data: T?
let errorDev: String?
enum CodingKeys: String, CodingKey {
case message = "msg"
case code = "code"
case data = "data"
// add more keys
}
public init(from decoder:Decoder) throws {
let contaienr = try decoder.container(keyedBy: CodingKeys.self)
message = try contaienr.decode(String.self, forKey: .message)
// Decode Other keys
do {
let object = try contaienr.decodeIfPresent(T.self, forKey: .data)
data = object
} catch {
data = nil
}
}
}
现在为你能做的每一个回应
使用GenericResponse<[Event]>
或 GenericResponse<Login>
或 GenericResponse<[UserList]>
希望对你有帮助
关于json - 可编码解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605250/
我对自定义 CSS 或在将图像作为 Logo 上传到页面时使用编码 block 有疑问。我正在为我的网站使用 squarespace,我需要帮助编码我的 Logo 以使其适合每个页面。一个选项是使用自
如 encoding/json 包文档中所述, Marshal traverses the value v recursively. If an encountered value implement
我必须做一些相当于Java中的iconv -f utf8 -t sjisMS $INPUT_FILE的事情。该命令在 Unix 中 我在java中没有找到任何带有sjisMS的编码。 Java中有Sh
从 PHP 5.3 迁移到 PHP 5.6 后,我遇到了编码问题。我的 MySQL 数据库是 latin1,我的 PHP 文件是 windows-1251。现在一切都显示为“ñëåäíèòå àäðå
我有一个 RScript文件(我们称之为 main.r ),它引用了另一个文件,使用以下代码: source("functions.R") 但是,当我运行 RScript 文件时,它提示以下错误:
我无法设法从 WSDL 创建 RPC/编码风格的代码 - 有谁知道哪个框架可以做到这一点? 带有 adb 和 xmlbeans 映射的 Axis2 无法正常工作(无法处理响应中的肥皂编码)直接使用 X
安装了最新版本的Node.Js()和npm包**(1.2.10)**当我运行 Express 命令来生成项目时,它向我抛出以下错误 buffer.js:240 switch (encoding &
JavaScript中有JSON编码/解码base64编码/解码函数吗? 最佳答案 是的,btoa() 和 atob() 在某些浏览器中可以工作: var enc = btoa("this is so
>>> unicode('восстановление информации', 'utf-16') Traceback (most recent call last): File "", line
我当然熟悉 java.net.URLEncoder 和 java.net.URLDecoder 类。但是,我只需要 HTML 样式的编码。 (我不想将 ' ' 替换为 '+' 等)。我不知道任何只做
有一个非常简单的 SSIS 包: OLE DB Source 通过 View 获取数据(数据库表 nvarchar 或 nchar 中的所有字符串列)。 派生列,用于格式化现有日期并将其添加到数据集(
我正在使用一个在 Node 中进行base64编码的软件,如下所示: const enc = new Buffer('test', 'base64') console.log(enc) 显示: 我正
前言 下文介绍的自定义协议仅作为学习示例,纯粹是玩具项目,没有实际可用性。无需过度关注和讨论其合理性 进行通信的双方是谁? 常见的模型 客户端-服务器,例如HTTP协议,浏览器<=>
我试图将带有日语字符的数据插入到 oracle 数据库中。事情是保存在数据库中的是一堆倒置的问号。我该如何解决这个问题 最佳答案 见 http://www.errcode.net/blogs/?p=6
当我在 java 中解压 zip 文件时,我发现文件名中出现了带有重音字符的奇怪行为。 西索: Add File user : L'equipe Technique -- Folder : spec
在网上冲浪我找到了 ExtJS 的 Ext.Gantt 插件,该扩展有一个特殊的编码。任何人都知道如何编码那样或其他复杂的形式。 Encoded Gantt Chart 最佳答案 它似乎被 Dean
我正在用C语言做一个编码任务,我进展顺利,直到读取符号并根据表格分配相应的代码的部分。我必须连接几个代码,直到它们的长度达到 32 位,为此我必须将它们写入一个文件中。这种写入文件的方法给我带来了很多
我有一个外部链接的 javascript 文件。在那个 javascript 里面,我有这个功能: function getMonthNumber(monthName){ monthName = mo
使用mechanize,我检索到一个网页的源页面,其中包含一些非ASCII字符,比如汉字。 代码如下: #using python2.6 from mechanize import Browser b
我有一个包含字母 ø 的文件。当我用这段代码 File.ReadLines(filePath) 读取它时,我得到了一个问号而不是它。 当我像这样添加编码时 File.ReadLines(filePat
我是一名优秀的程序员,十分优秀!