首页 > 解决方案 > 将 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))

标签: jsonswift

解决方案


从报错信息来看,您似乎声明createdDate为 a Double,但在 JSON 中,关联的值createdDate是一个字符串。

您应该声明createDate为 a (如果您想要 a ,Date您可以随时使用),并将解码器设置为,因为您的日期似乎是这种格式:createdDate.timeIntervalSince1970DoubledateDecodingStrategyiso8601

let decoder = JSONDecoer()
decoder.dateDecodingStrategy = .iso8601
// you shouldn't really use "try!" here...
let userGroup = try! decoder.decode(StakeholderMHSGroup.self, from: data!)

推荐阅读