![](/img/trans.png)
[英]How to create a model class and access the values from JSON response using Codable in ios swift?
[英]How to create nested json from codable model in iOS Swift?
我一直在嘗試從模型創建 json。 最初創建了 aadhar 模型並將 aadhar 數據從 api 響應存儲到模型。
並創建了另一個aadhar模型2,將aadhar模型值傳遞給aadhar模型2。 但是 aadhar 模型 1 和 aadhar 模型 2 響應不同的參數。
這是我的 json 響應值。
{
"apiVersion": "1.3.1",
"id": "387a65ba6e51cd1d18bef58cc60c47b751830532ea10465106a54d600d5042f9",
"data": {
"meta": {
"confidence_ocr_mean": 0.95869,
"confidence_ocr_var": 0.00912,
"confidence_ocr_skew": -4.06817,
"confidence_ocr_kurt": 17.71878,
"model_confidence": 1.0,
"image_resolution": "7427 * 2623",
"checksum_status": true
},
"info": {
"name": [
"V",
"Parameswaran"
],
"date_of_birth": {
"date": 28,
"month": 12,
"year": 1989
},
"aadhaar_id": "4682********",
"gender": "male",
"address": [
"Unique Identification Authority of India C/O",
"316 / 87",
"*******",
"*******",
"***********",
"*******",
"*****"
],
"state": null,
"pincode": null
}
}
}
AAdhar 模型 1 類:
import Foundation
public struct aadharModels: Codable {
let id: String
let info: infoAadharClass
enum CodingKeys: String, CodingKey {
// case links = "_links"
case info = "info"
case id
}
}
struct infoAadharClass: Codable {
let aadhaar_id, gender: String
let name: [String]
let dateofbirth: DobClass
let address: [String]
enum CodingKeys: String, CodingKey {
case aadhaar_id, gender
case name
case address
case dateofbirth = "date_of_birth"
}
}
struct DobClass: Codable {
let date, month, year: String
enum CodingKeys: String, CodingKey {
case date, month, year
}
}
這是我將 aadhar 模型 1 傳遞給 aadhar 模型 2 的代碼:
let aadharID = data.info.aadhaar_id
let aadharB_Day = data.info.dateofbirth.date
let aadharB_month = data.info.dateofbirth.month
let aadharB_year = data.info.dateofbirth.year
let aadharGender = data.info.gender
let aadharName = data.info.name
let aadharAddress = data.info.address
print("aadhar address", aadharAddress)
let aadharDate = aadharB_Day+"/"+aadharB_month+"/"+aadharB_year
var aadhar_c = AadharModelConverted(aadharNumber: aadharID, dob: aadharDate, gender: aadharGender, name: aadharAddress, address: aadharAddress)
//convert to json
let jsonData = try! JSONEncoder().encode(aadhar_c)
let jsonString = String(data: jsonData, encoding: .utf8)!
print("json object using pan model",jsonString)
這是 aadhar 模型 2:
import Foundation
public struct AadharModelConverted: Codable {
var aadharNumber: String?
var dob: String?
var gender: String?
var name: [String]?
var address: addressSubclass_c
enum CodingKeys: String, CodingKey {
case aadharNumber, dob, gender, name
case address = "address"
}
}
struct addressSubclass_c: Codable {
var values: [String]
}
我試圖獲得的 Json 輸出:
{
"aadharNumber": "60**********",
"dob": "0/0/1994",
"gender": "male",
"name": "VipinAgrawal",
"address": {
"values": [
"S/O Mukesh Agrawal",
"ho",
"no - 67",
"******",
"******",
"******"
]
}
}
任何幫助非常感謝請...
首先,解析實際JSON 的初始Codable
模型應該是這樣的,
struct Root: Codable {
let id: String
let data: AadharData
var formattedModel: AadharModelConverted {
var model = AadharModelConverted()
model.aadharNumber = self.data.info.aadhaarId
model.dob = String(describing: self.data.info.dateOfBirth)
model.gender = self.data.info.gender
model.name = self.data.info.name
model.address?.values = self.data.info.address
return model
}
}
struct AadharData: Codable {
let info: AadharInfo
}
struct AadharInfo: Codable {
let aadhaarId, gender: String
let name: [String]
let dateOfBirth: DOB
let address: [String]
}
struct DOB: Codable, CustomStringConvertible {
let date, month, year: Int
var description: String {
return "\(date)/\(month)/\(year)"
}
}
在上述模型中,
1. struct Root
包含一個計算屬性formattedModel
,它將返回一個AadharModelConverted
類型的模型
2. 使struct DOB
符合CustomStringConvertible
並覆蓋description
以返回預期的String
值。
struct AadharModelConverted: Codable {
var aadharNumber: String?
var dob: String?
var gender: String?
var name: [String]?
var address: Address?
}
struct Address: Codable {
var values: [String]
}
您現在可以使用解析JSON數據,
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let model = try decoder.decode(Root.self, from: data)
let formattedModel = model.formattedModel
let data = try JSONEncoder().encode(formattedModel)
let str = String(data: data, encoding: String.Encoding.utf8)
print(str)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.