如何为JSON创建Swift模型


{"dataList":{"1547795650562": {
"c0a8007b-6759-111d-8167-59e8dabe0086": {
"recordDate": 1547795650562,
"resultValue": "160",
"vitalParameter": {
"uom": {
"code": "KG",
"name": "KG",
"id": "c0a8007b-6759-111d-8167-59e76204007f"
},
"resultType": {
"code": "VSRTNUMERIC",
"name": "Numeric",
"id": "20cf4756-40b0-4cc1-acb5-861765370a41"
},
"code": "29463-7",
"name": "Weight",
"id": "c0a8007b-6759-111d-8167-59e8dabe0086"
},
"id": "c0a8007b-6855-1d16-8168-5fd18fa301b7"
}}
}}

得到154779565062和c0a8007b-6759-111d-8167-59e8dabe0086作为类名。但我不想这样;

class DataList : NSObject, NSCoding{
var 1547795650562 : 1547795650562!
}
class 1547795650562 : NSObject, NSCoding{
var c0a8007b6759111d816759e8dabe0086 : VitalParameter!
}

但这里的问题是,1547795650562和c0a8007b-6759-111d-8167-59e8dabe0086不能硬编码,因为它们可能会更改。

c0a8007b-6759-111d-8167-59e8dabe0086是动态id,1547795650562是recordDate。内部对象是重复的。

但我必须映射,因为键分别是recordDate和id。

尝试使用Codable而不是NSCoding来解析JSON数据。

型号:

struct Root: Codable {
let dataList: [String:[String:Record]]
}
struct Record: Codable {
let recordDate: Int
let resultValue: String
let vitalParameter: VitalParameter
let id: String
}
struct VitalParameter: Codable {
let uom, resultType: ResultType
let code, name, id: String
}
struct ResultType: Codable {
let code, name, id: String
}

使用上述模型分析JSON数据,如

do {
let response = try JSONDecoder().decode(Root.self, from: data)
print(response)
} catch {
print(error)
}

注意:您可以使用https://app.quicktype.io立即从JSON中获取模型。根据你的要求做出改变,你就可以出发了。

最新更新