Swift Codable:使用未知键解码字典

2024-03-15

Codable当您了解 JSON 数据的关键格式时,这会非常有用。但是如果您不知道密钥怎么办?我目前面临这个问题。

通常我希望 JSON 数据像这样返回:

{
"id": "<123>",
"data": [
    {
        "id": "<id1>",
        "event": "<event_type>",
        "date": "<date>"
    },
    {
        "id": "<id2>",
        "event": "<event_type>",
        "date": "<date>"
    },
]
}

但这就是我想要解码的:

{
"id": "123",
"data": [
    { "<id1>": { "<event>": "<date>" } },
    { "<id2>": { "<event>": "<date>" } },
]
}

问题是:我该如何使用Codable解码 JSON,其中键是唯一的?我觉得我错过了一些明显的东西。

这就是我希望做的,这样我就可以使用Codable:

struct SampleModel: Codable {
    let id: String
    let data: [[String: [String: Any]]]

    // MARK: - Decoding

    enum CodingKeys: String, CodingKey {
        case id = "id"
        case data = "data"
    }

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)

        id = try container.decode(String.self, forKey: .id)
        // This throws an error: Ambiguous reference to member 'decode(_:forKey:)'
        data = try container.decode([[String: [String: Any]]].self, forKey: .data)
    }
}

这会引发错误:Ambiguous reference to member 'decode(_:forKey:)'


对于你完全改变的问题,解决方案非常相似。您的结构只是在数组上方添加了一层。不需要任何自定义解码,甚至不需要任何 CodingKey。

请注意,您不能使用Any在可编码中。

let json="""
{
"id": "123",
"data": [
    { "<id1>": { "<event>": "2019-05-21T16:15:34-0400" } },
    { "<id2>": { "<event>": "2019-07-01T12:15:34-0400" } },
]
}
"""
struct SampleModel: Codable {
    let id: String
    let data: [[String: [String: Date]]]
}

var decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
do {
    let res = try decoder.decode(SampleModel.self, from: json.data(using: .utf8)!)
    print(res)
} catch {
    print(error)
}

您原来问题的原始答案。

由于您有一个嵌套字典数组,其中没有固定字典键,并且由于没有其他字段,因此您可以将其解码为普通数组。

这是一个例子:

let json="""
[
    { "<id1>": { "<event>": "2019-07-01T12:15:34-0400" } },
    { "<id2>": { "<event>": "2019-05-21T17:15:34-0400" } },
]
"""
var decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
do {
    let res = try decoder.decode([[String: [String: Date]]].self, from: json.data(using: .utf8)!)
    print(res)
} catch {
    print(error)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift Codable:使用未知键解码字典 的相关文章

  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • 是否可以更改枚举中的关联值?

    我正在使用 Swift 枚举 想知道是否有一种方法可以更改枚举的关联值 例如下面的代码尝试但失败了 enum myEnum case SomeCase Int mutating func someFunc switch self case
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 在 React Native 中将 Swift 事件发送到 Javascript 的正确流程

    我一直在尝试使用 Swift 构建全面的蓝牙功能 我目前陷入了如何将事件从 Swift 发送回 React Native 的困境 我尝试过this https stackoverflow com questions 31870775 rea
  • 为什么在迭代字典时会出现“类型 [object] 的值没有成员 'lowercaseString'” 错误? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有几个对象 Struct object var title String var one object green v
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 不明白 Swift 中的闭包示例

    我正在尝试了解 swift 和闭包 我被这个例子困住了 numbers map number Int gt Int in let result 3 number return result 什么是 number Int gt Int 它是一
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 如何防止Apple Watch进入睡眠状态?

    我们正在开发一个 Apple Watch 项目 但如果不被打扰 手表就会进入睡眠状态 有什么办法可以阻止它进入睡眠状态吗 据我所知和有关该主题的其他搜索 目前还没有api可通过编程方式启用或禁用 Apple Watch 的睡眠模式
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • init 中的 Swift 通用约束

    我有通用的 我希望能够用特定的约束来初始化它 约束仅用于初始化 班里的其他人并不关心 这是一个简化的示例 struct Generic
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们

随机推荐

  • 使用状态变量作为 SwiftUI 中函数的输入

    我有两个文本字段 用于更改两个 State 变量 即startingMileage 和endingMileage 的值 以及一个步进器 用于更改名为fuelAdded 的第三个 State 变量的值 我正在尝试使用用户的输入并进行计算来计算
  • 圆角后可成形图像视图上的黑色边缘

    After rounding the edges on my shapeable image view I still get black edges around the rounded edges 这是我的 xml
  • 如何使画布轮廓成为透明 png 以实现悬停发光

    是否可以自动为图像提供发光效果 例如使用画布 jsfiddle http jsfiddle net LAS8L 88 canvas 标签必须省略透明 并使其具有外发光
  • 如何在流畅的nhibernate中将复合主键映射到外国?

    我有以下表格 table A FOO PK CLIENT PK table B BAR PK CLIENT PK FK FOO FK PK gt 主键 FK gt 外键 A 和 B 之间存在一对多关系 我不能简单地这样做 class AMa
  • Flutter - 自定义按钮点击区域

    我正在构建一个 Flutter 应用程序 其中屏幕的很大一部分将被圆形按钮占据 我已经尝试了几种不同的方法来创建圆形按钮 但我总是遇到同样的问题 可点击 区域实际上不是圆形的 而是矩形的 这是一个使用以下方法获得的示例FloatingAct
  • 按任意键对元组列表进行排序

    order w x a z object a object x object z object a object w 如何根据 order 提供的键列表按第二个元素对上面的元组列表进行排序 2013 年 11 月 18 日更新 我发现了一个
  • 将值加载到 Selectize.js 中

    Problem 我有一个文本输入 我选择它作为标签 它可以很好地查询远程数据 我可以使用它搜索甚至创建新项目 并且一切正常 使用选择 var select authorsearch selectize valueField AuthorId
  • 使用 JavaScript 切换 CSS 类 - 错误

    我正在尝试制作一个脚本 当用户单击具有 burger nav img 类的图像时 它会在另一个元素中切换 open 类 我的代码是 HTML
  • Swing - 使用 getComponent() 更新所有 JButton

    我正在制作一个井字棋游戏 其中每个棋盘都由一个 JButton 代表 当有人单击该按钮时 文本将更改为 X 或 O 我正在编写一个重置函数 它将所有按钮中的文本重置为 我正在使用 getComponents 方法访问数组中的所有按钮 我只是
  • 为 GridView 的 PagerTemplate 动态生成页面链接按钮

    从 MSDN 页面获取PagerTemplate of the GridView控制 强调我的 通常 按钮控制添加到寻呼机模板中以执行寻呼操作 当单击 CommandName 属性设置为 Page 的按钮控件时 GridView 控件将执行
  • 是否可以在不使用 ApplicationContextAware 的情况下检索具有原型范围的 Spring bean

    使用Spring 3 1 如果我想检索具有原型范围的 bean 即我每次都想要该类的不同实例 是否可以在不使用 ApplicationContextaware 类的情况下检索该 bean 这就是我目前的做法 Component Qualif
  • ModuleNotFoundError:没有名为“建模”的模块

    我对深度学习和 python 非常陌生 我正在尝试重新创建该项目https github com Nagakiran1 Extending Google BERT as Question and Answering model and Ch
  • 能否阻止单个应用程序的 Microsoft 错误报告?

    我们有一个非托管 C 应用程序 它利用第 3 方 API 来读取 CAD 文件 对于某些损坏的 CAD 文件 第 3 方库崩溃并导致我们的 EXE 崩溃 因此 我们的主应用程序是一个单独的 EXE 这样它就不会受到崩溃的影响 然而 我们最终
  • 使用 java POI 插入表时 Open Office writer 崩溃

    我正在尝试使用 open office 使用 apache poi 以 docx 格式插入表 但是每次打开文件时文件都会崩溃 XWPFDocument document new XWPFDocument FileOutputStream o
  • 单击浏览器的后退按钮时重定向到特定页面

    这是一个有点菜鸟的问题 但事实就是这样 我有一个网站 用户只能通过下一页和后退按钮从一个页面导航到另一个页面 即有一个用户必须遵循的向导 向导的一部分包含不同的页面 一部分包含相同的页面但具有更改的 div 但从用户体验来看 它是不同的页面
  • Stream_Copy_To_Stream() 的替代方案 php

    我现在正在开发一个文件共享网站 遇到了一个小问题 我正在使用上传脚本 uploadify 它工作得很好 但如果用户想要 我希望上传的文件被加密 现在我有可以执行此操作的工作代码 如下所示 但我的服务器只有 1GB 或内存 并且使用strea
  • 如何在 WooCommerce 3+ 中进行调试

    我正在使用本教程为 Woocommerce 创建自定义运输方法https docs woocommerce com document shipping method api https docs woocommerce com docume
  • 如何“重置”给定 HTML 元素的样式?

    我正在开发一个可嵌入的 javascript 它将 HTML 元素插入未知页面 我无法控制要插入 HTML 的页面的样式表 问题是我插入的 HTML 会被页面错误地风格化 我想防止这种情况发生 确保我插入的元素是最不冗长和 或资源密集的ex
  • 使用 pd.read_clipboard 复制多索引数据帧?

    Given a 像这样的数据框 https stackoverflow com questions 17921010 how to query multiindex index columns values in pandas C A B
  • Swift Codable:使用未知键解码字典

    Codable当您了解 JSON 数据的关键格式时 这会非常有用 但是如果您不知道密钥怎么办 我目前面临这个问题 通常我希望 JSON 数据像这样返回 id lt 123 gt data id