json - 将 json 转换为 swift 对象返回 nill?
问题描述
我正在尝试将 JSON 文件转换为 swift 对象,但我无法弄清楚它为什么返回 nill。当您从代码中使用时,我有两个对象一个 Stakeholder 和另一个 MHSGroup 我创建了一个结构来保存收集的数据 StakeholderMHSGroup
struct StakeholderMHSGroup : Codable {
var stakeholders:[Stakeholder]?
var mhsGroups:[MhsGroup]?
}
主迅捷
let jsonStr = "{\"stakeholders\":[{\"id\":\"d95bb600-f63b-4ec7-bd2f-d14bdf1c145f\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"emailAddress\":\"John.Doe@mail.com\",\"salutation\":\"Ms\"},{\"id\":\"d95bb600-f63b-4ec7-bd2f-d14bdf1c145d\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"emailAddress\":\"John.Doe@mail.com\",\"salutation\":\"Ms\"},{\"id\":\"d95bb600-f63b-4ec7-bd2f-d14bdf1c545f\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"emailAddress\":\"John.Doe@mail.com\",\"salutation\":\"Ms\"},{\"id\":\"d95bb600-f63b-4ec7-bd2f-d14baf1c145f\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"emailAddress\":\"John.Doe@mail.com\",\"salutation\":\"Ms\"}],\"mhsGroups\":[{\"id\":\"495919eb-dcbc-48c5-99f5-48f6790b79e3\",\"name\":\"Group1\",\"membersCount\":5,\"createdDate\":\"2012-04-23T18:25:43.511Z\"},{\"id\":\"495919eb-dcbc-48c5-99f5-48f6290b79e3\",\"name\":\"Group1\",\"membersCount\":5,\"createdDate\":\"2012-04-23T18:25:43.511Z\"},{\"id\":\"495919eb-dcbc-48c5-99f5-48f6790b79e4\",\"name\":\"Group1\",\"membersCount\":5,\"createdDate\":\"2012-04-23T18:25:43.511Z\"},{\"id\":\"495919eb-dcbc-48c5-99f5-48f6790b79e2\",\"name\":\"Group1\",\"membersCount\":5,\"createdDate\":\"2012-04-23T18:25:43.511Z\"}]}"
"{"利益相关者":[{"id":"d95bb600-f63b-4ec7-bd2f-d14bdf1c145f","firstName":"John","lastName":"Doe","emailAddress":"John.Doe@mail .com","salutation":"Ms"},{"id":"d95bb600-f63b-4ec7-bd2f-d14bdf1c145d","firstName":"John","lastName":"Doe","emailAddress": "John.Doe@mail.com","salutation":"Ms"},{"id":"d95bb600-f63b-4ec7-bd2f-d14bdf1c545f","firstName":"John","lastName":"Doe ","emailAddress":"John.Doe@mail.com","salutation":"Ms"},{"id":"d95bb600-f63b-4ec7-bd2f-d14baf1c145f","firstName":"John", "lastName":"Doe","emailAddress":"John.Doe@mail.com","salutation":"Ms"}],"mhsGroups":[{"id":"495919eb-dcbc-48c5-99f5- 48f6790b79e3","name":"Group1","membersCount":5,"createdDate":"2012-04-23T18:25:43.511Z"},{"id":"495919eb-dcbc-48c5-99f5-48f6290b79e3 ","name":"Group1","membersCount":5,"createdDate":"2012-04-23T18:25:43.511Z"},{"id":"495919eb-dcbc-48c5-99f5-48f6790b79e4" ,"name":"Group1","membersCount":5,"createdDate":"2012-04-23T18:25:43.511Z"},{"id":"495919eb-dcbc-48c5-99f5-48f6790b79e2", "名称":"Group1","membersCount":5,"createdDate":"2012-04-23T18:25:43.511Z"}]}"
var data:Data?
data = jsonStr.data(using: .utf8)!
let userGroup = try! JSONDecoder().decode(StakeholderMHSGroup.self, from: data!)
print(userGroup)
更新调试错误
线程 1:致命错误:“尝试!” 表达式意外引发错误:Swift.DecodingError.typeMismatch(Swift.Double, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "mhsGroups", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0 ), CodingKeys(stringValue: "createdDate", intValue: nil)], debugDescription: "预期解码 Double,但找到了一个字符串/数据。",underlyingError: nil))
解决方案
从报错信息来看,您似乎声明createdDate
为 a Double
,但在 JSON 中,关联的值createdDate
是一个字符串。
您应该声明createDate
为 a (如果您想要 a ,Date
您可以随时使用),并将解码器设置为,因为您的日期似乎是这种格式:createdDate.timeIntervalSince1970
Double
dateDecodingStrategy
iso8601
let decoder = JSONDecoer()
decoder.dateDecodingStrategy = .iso8601
// you shouldn't really use "try!" here...
let userGroup = try! decoder.decode(StakeholderMHSGroup.self, from: data!)
推荐阅读
- android - 通过意图打包枚举
- node.js - express中的动态路由器
- ios - 如何在 iOS 中在后台跟踪用户行走并使用 Swift 和 Xcode 计算到目前为止的距离?
- c - Horspool 列出所有字符串实例
- database - 在数据库中将 ID 存储为 int 并使用 Dapper 将它们作为 HashID 获取
- java - 如何在另一个 Activity 的文本视图中调用方法的输出?
- java - 为什么我的代码每次都显示相同的输出?
- linq - 用于数组的 LINQ 查询 IN
- python - 有没有办法使用 python Dictionary 在数据库中创建表?
- r - 在 R 中使用 Leaflet 和 Googleway 映射两个反应式数据集