gpt4 book ai didi

json - 使用名为 self 的元素解码 JSON

转载 作者:行者123 更新时间:2023-12-05 00:10:02 25 4
gpt4 key购买 nike

在 Swift 5.1 中,我想解码包含名为 self 的元素的 JSON 文档。它是一个 HAL 文档,因此我无法更改元素名称。

JSON 是这样的;

{
"_embedded": {
"eventList": [
{
"id": 1,
"datetime": "2020-04-20T20:00:00",
"description": "...",
"_links": {
"self": {
"href": "http://.../events/1"
}
}
},
{
"id": 2,
"datetime": "2020-04-19T08:30:00",
"description": "...",
"_links": {
"self": {
"href": "http://.../events/2"
}
}
}
]
},
"_links": {
"self": {
"href": "http://.../events"
}
}
}

我的域模型看起来像这样
struct JSonRootElement: Codable {
var _embedded: JsonEmbedded
}

struct JsonEmbedded: Codable {
var eventList: [JsonEvent]
}

struct JsonEvent: Codable {
var id: Int
var datetime: String
var description: String
var _links: JsonHalLink
}

struct JsonHalLink: Codable {
var self: JsonHalSelfLink
}

struct JsonHalSelfLink: Codable {
var href: String
}


当然, JsonHalLink 结构包含禁止名称。我可以重命名变量名,但是如何告诉 Swift 它必须从 JSON 读取 self 元素?

最佳答案

您可以在受限制的关键字周围使用反引号 (`) 将它们用作变量名称。

struct JsonHalLink: Codable {
let `self`: JsonHalSelfLink
}

否则,如果您希望变量的名称与其 JSON 键的名称不同,则可以声明 CodingKey符合 enum定义属性名称和 JSON 键之间的映射。
struct JsonHalLink: Codable {
let varName: JsonHalSelfLink

private enum CodingKeys: String, CodingKey {
case varName = "self"
}
}

与您的问题无关,但您应该只在属性确实需要可变时才将它们声明为可变的( var )。如果它们从未发生过变异,只需将它们声明为不可变的 ( let )。

关于json - 使用名为 self 的元素解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com