热门标签 | 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)。


推荐阅读
  • 使用SwiftyJSON第三方库时,有时会发现获取到的数据顺序出现混乱。本文将探讨这一现象的原因,并提供解决方案以确保数据按预期顺序排列。 ... [详细]
  • 本文章以 IntelliJ IDEA 为例,详细介绍了如何配置和调试 FlinkX 项目。主要内容包括如何设置运行参数,以便在本地环境中顺利执行 FlinkX 任务。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • 全面解读Apache Flink的核心架构与优势
    Apache Flink作为大数据处理领域的新兴力量,凭借其独特的流处理能力和高效的批处理性能,迅速获得了广泛的关注。本文旨在深入探讨Flink的关键技术特点及其应用场景,为大数据处理提供新的视角。 ... [详细]
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • 本文基于前文的内容,进一步探讨如何在 iOS 应用中高效地实现高斯模糊背景效果。我们将通过具体代码示例,展示如何利用 Swift 和 UIKit 创建具有毛玻璃效果的界面背景。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 系统:MacOS10.15.2,XCode11.3,swift5.0写作时间:2020-01-09说明Swift中的闭包(Closur ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • SDWebImage第三方库学习
    1、基本使用方法异步下载并缓存-(void)sd_setImageWithURL:(nullableNSURL*)urlNS_REFINED_FOR_SWIFT;使用占位图片& ... [详细]
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社区 版权所有