Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中将嵌套json与结构一起使用_Ios_Iphone_Swift_Data Structures - Fatal编程技术网

Ios 如何在swift中将嵌套json与结构一起使用

Ios 如何在swift中将嵌套json与结构一起使用,ios,iphone,swift,data-structures,Ios,Iphone,Swift,Data Structures,我有一个API,我需要调用,以获得一个带有一些附加信息的假期列表。我的API的链接- 我使用网站app.quicktype.io创建的结构 struct Holiday: Codable { let responseCode, responseMsg: String let holidayCount: Int let holidays: [HolidayElement] enum CodingKeys: String, CodingKey { case resp

我有一个API,我需要调用,以获得一个带有一些附加信息的假期列表。我的API的链接-

我使用网站app.quicktype.io创建的结构

struct Holiday: Codable {
    let responseCode, responseMsg: String
    let holidayCount: Int
    let holidays: [HolidayElement]

enum CodingKeys: String, CodingKey {
    case responseCode = "response_code"
    case responseMsg = "response_msg"
    case holidayCount = "holiday_count"
    case holidays
    }
}
struct HolidayElement: Codable {
    let month: String
    let image: String
    let details: [Detail]
}
struct Detail: Codable {
    let title, date, day: String
    let color: Color
}
enum Color: String, Codable {
    case b297Fe = "#B297FE"
    case e73838 = "#E73838"
    case the0D8464 = "#0D8464"
}
我可以访问“Holiday”对象,打印它,显示带有“holidayCount”颜色的tableViewCells。我想做的是,在不使用常规json解析和制作自己的数组和dict的情况下,访问每个“假日”的“细节”

tl;博士-我需要知道如何访问假期元素的详细信息


谢谢

您的数据返回时包含一个
HolidayElement
数组,每个
HolidayElement
都有一个
详细信息数组

因此,对于每个
HolidayElement
,您都希望能够访问
详细信息
数组。你应该这样做:

let jsonResponse = try JSONDecoder().decode(Holiday.self, from: responseData)
print(jsonResponse.holidays[0].details)
这是一个例子

此外,您的编码键只是从
snake\u case
转换而来,因此您不需要将它们用于该端点。相反,您只需告诉解码器从Snakecase
convertFromSnakeCase

在这种情况下,您可以放弃编码键,只需按如下方式解码:

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let jsonResponse = try decoder.decode(Holiday.self, from: responseData)
print(jsonResponse.holidays[0].details)

你有一个有效的解决方案,但你没有。想要使用它,我理解正确了吗?
holidays
details
都是包含多个项目的数组。通过索引获取项目或使用循环对其进行迭代。放弃编码键是一个优雅的解决方案。我可以问一下为什么和什么时候会这样做,为什么和什么时候不这样做吗?JSONDecoder可以为您转换snake case,因此如果您不打算重命名密钥,则无需对其进行编码。如果要重命名键,则需要对键进行编码