Swift 4 JSON 可解码,具有多维和多类型数组

2023-12-19

{
"values":[
[1,1,7,"Azuan Child","Anak Azuan","12345","ACTIVE","Morning",7,12,"2017-11-09 19:45:00"],
[28,1,0,"Azuan Child2","Amran","123456","ACTIVE","Evening",1,29,"2017-11-09 19:45:00"]
]
}

好的,这是我从服务器收到的 json 格式

现在我想将它解码到我的结构中,但仍然没有运气。

struct ChildrenTable: Decodable {
    var values: [[String]]?
}

我在 URLSession 上的调用者方法如下所示

URLSession.shared.dataTask(with: request) { (data, response, err) in
        guard let data = data else { return }

        let dataAsString = String(data: data, encoding: .utf8)
        print(dataAsString)

        do {
            let children  = try
                JSONDecoder().decode(ChildrenTable.self, from: data)
                print (children)
        } catch let jsonErr {
            print ("Error serializing json: ", jsonErr)
        }
    }.resume()

我得到的错误是

Error serializing json:  
typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [Vito_Parent.ChildrenTable.(CodingKeys in _1B826CD7D9609504747BED0EC0B7D3B5).values, Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)), 
Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0))], 
debugDescription: "Expected to decode String but found a number instead.", underlyingError: nil))

我知道数组中有一个 int,我只将 String 转换为值var values: [[String]]?(这个错误弹出的原因),但我根本不能在我的结构中使用任何多维数组或元组,因为它遵循 Decodable 协议。

我也无法将数据转换为字典,因为它会抛出错误“预期解码字典但找到数组”

关于解决这个问题有什么想法吗?我尝试在数据上转换字符串类型,但仍然没有运气......

p/s:如果所有的json格式都是字符串类型,那就没有问题,但是我没有更改它的权限,因为我是从API调用它的。


正如你所说,你的 json 数组是多种类型的,但你试图将所有解码为String。默认一致性String to Decodable不允许这样做。我想到的唯一解决方案是引入新类型。

struct IntegerOrString: Decodable {
    var value: Any

    init(from decoder: Decoder) throws {
        if let int = try? Int(from: decoder) {
            value = int
            return
        }

        value = try String(from: decoder)
    }
}

struct ChildrenTable: Decodable {
    var values: [[IntegerOrString]]?
}

在线运行 https://swift.sandbox.bluemix.net/#/repl/5a052588a70db835d77cd879

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 4 JSON 可解码,具有多维和多类型数组 的相关文章

随机推荐

  • 如何使用管道在两个程序之间发送简单的字符串?

    我尝试在网上搜索 但几乎没有任何资源 一个小例子就足够了 编辑 我的意思是 两个不同的 C 程序相互通信 一个程序应该发送 Hi 另一个程序应该接收它 类似的事情 常规管道只能连接两个相关的进程 它是由一个进程创建的 当最后一个进程关闭它时
  • 使用 Android DateUtils API 在 Android 中将相对日期格式化为人类可读的格式

    我有一个日期字段 lastUpdated 我想将此日期翻译为人类可读的格式 例如 今天 1 天前 2 天前 我在用android text format DateUtils http developer android com refere
  • 错误:找不到资源整数/google_play_services_version(又名应用程序:整数/google_play_services_version)

    编译或运行项目时出现错误 我想计算我行驶的距离 我的Android studio版本是Android Studio 3 1 4 当我在 build gradle Model app 中添加以下库时 会发生此错误 implementation
  • JavaFx 2.x:如何在图表上写入文本?

    通过在图表上单击鼠标左键 我想通过创建文本区域矩形来写入文本 以便能够调整大小和移动 任何帮助真的很感激 Edit 嗨 sarcan 非常感谢您的友好回复 我尝试了你的代码 它编译并绘制了带有注释的面积图 非常出色的工作 我现在需要更改您的
  • 递增数字作为 Firestore 文档名称?

    基本上总结在标题中 我想让在特定集合中创建的每个新文档都具有增量排序的序列号 这是为了正确跟踪写入数据库的新订单 AutoID是随机的并会导致排序问题 我希望数据易于管理 这可以通过云功能实现吗 我可以查看任何示例代码片段吗 谢谢你 Use
  • 从 URL iOS 加载图像 [重复]

    这个问题在这里已经有答案了 我正在尝试从图像 URL 加载图像 我研究和尝试过的所有代码都发现了一些错误 其中很多与新的 ARC 兼容性有关 我需要将图像加载到图像视图中 任何帮助表示赞赏 Thanks 我将从这里改编吉姆 多维的回答从 U
  • 带预处理器的稀疏矩阵求解器

    我有一个scipy sparse csc matrix稀疏矩阵A形状的 N N where N是关于15000 A有小于1 非零元素 我需要解决Ax b尽可能节省时间 Using scipy sparse linalg spsolve大约需
  • 用 Go (golang) 编写 Ruby 扩展

    是否有一些关于如何在 Go 中编写 Ruby 扩展的教程或实践课程 Go 1 5 添加了对构建可从 C 因此可以通过 FFI 从 Ruby 调用的共享库的支持 这使得该过程比 1 5 之前的版本 当时需要编写 C 粘合层 更容易 并且 Go
  • 谷歌日历的 API OAuth Google 集成访问错误(来源不匹配)

    我正在将谷歌日历与 Angular UI 日历集成 以获取谷歌日历的事件数据 这是我的 HTML div div
  • 通过 JavaScript 迭代/解析 JSON 对象

    我在使用 jQuery Ajax JSON 时遇到问题 我正在使用 jQuery ajax post 像这样 ajax type POST dataType json url someurl com data cmd escape me c
  • Android 上的 XMLSchema 验证

    我维持JDOM项目 http www jdom org 我正在尝试在 Android 上 验证 它 大多数事情都工作正常 但 XML 模式验证却存在问题 我的问题是 有没有办法在 Android 上进行 XMLSchema 验证 如果有的话
  • jQuery - 分别处理同一类的多个实例?

    Goal 我正在尝试创建一个视差滚动 effect The 视差容器是这样实现的 lt div class parallax slide 1 gt lt div gt 我需要启动视差效果 当它的容器已滚动到视图中 一旦有了离开视图 效果需要
  • 使用 Bootstrap 响应表和 AngularJS 修复了第一列

    我整个上午都在努力解决这个 CSS 问题 但我似乎无法取得任何进展 基本上 我有一个水平滚动表 我使用了引导响应表 并且刚刚删除了媒体查询 因此它可以在所有屏幕尺寸下水平滚动 我使用 Angular 的 ng repeat 来循环标题数组和
  • 如何从代码向 Umbraco 中的文档类型添加属性?

    谁能给我一个示例 说明如何以编程方式向 Umbraco CMS 中的现有文档类型添加属性 这是我尝试过的 var dt DocumentType GetByAlias TestDocType dt AddPropertyType new D
  • 首次在 eclipse 中创建项目时获得的 Hello world 应用程序的 APK 大小是多少?

    我知道像 Hello World 这样的简单应用程序的大小小于 10 Kb 如下所示 但是当我尝试在项目创建后立即生成 APK 时 它显示该应用程序超过 500 Kb 左右 我知道在 build gradle 中将 minify 选项设置为
  • 第二次出现字符后分割文本

    我需要在第二次出现 字符之前分割文本 我现在所得到的是产生不一致的结果 我尝试过各种组合rsplit并通读并尝试了其他解决方案 但没有结果 要分割的示例文件名 some sample filename to split 返回于data fi
  • Symfony Doctrine2 多对多关系未删除 - 特定于 SQLite

    我有几个类使用 Taggable 特征来设置多个学说实体 项目 注释等 通用的标签系统 这些实体和这些标签之间的关系是多对多关系 我无法将其设为多向 我的问题 当我删除项目实体时 它会从project表中的关系 但是项目标签该项目和标签之间
  • Android 上的异常处理和生命周期?

    我正在尝试学习和测试 android 中的异常 但似乎无法 通过 try catch Thread currentThread setUncaughtExceptionHandler new MyExceptionHandler 和 ACR
  • ProgressBar的颜色没有改变c#

    我的要求是每当我单击按钮时将进度条的颜色更改为红色 我不想注释掉Application EnableVisualStyles 所以我尝试使用SendMessage 我的代码 DllImport user32 dll private stat
  • Swift 4 JSON 可解码,具有多维和多类型数组

    values 1 1 7 Azuan Child Anak Azuan 12345 ACTIVE Morning 7 12 2017 11 09 19 45 00 28 1 0 Azuan Child2 Amran 123456 ACTIV