热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

使用名为self的元素解码JSON

如何解决《使用名为self的元素解码JSON》经验,为你挑选了1个好方法。

在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元素?



1> Dávid Pászto..:

您可以在受限关键字周围使用反引号(`),将其用作变量名。

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在实际需要将属性可变时才将其声明为mutable()。如果它们从未被突变,只需将它们声明为不可变(let)。


推荐阅读
author-avatar
高德福瑞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有