如何使用此 JSON 制作結構模型?我在youtube上看過很多教程,但我仍然很困惑,在struct上使用enum是什么意思?
{
"err_code": 0,
"data": {
"message": "Success",
"result": {
"check_in": [
{
"created_at": "2022-06-20 10:00:37",
"late": "True",
"location": "Jl. H. Asmawi No.63, Beji, Kecamatan Beji, Kota Depok, Jawa Barat 16421, Indonesia",
"place": "GRIT OFFICE",
"folder": "./pegawai/grit/2022/06/20/masuk/10/00/",
"filename": "0000_rakha_fatih_athallah_picture.jpg",
"tujuan": "",
"link": "http://103.140.90.10:8081/face-recognition/client/python/pegawai/grit/2022/06/20/masuk/10/00/0000_rakha_fatih_athallah_picture.jpg"
},
{
"created_at": "2022-06-16 11:23:12",
"late": "True",
"location": "Jl. H. Asmawi No.63, Beji, Kecamatan Beji, Kota Depok, Jawa Barat 16421, Indonesia",
"place": "GRIT OFFICE",
"folder": "./pegawai/grit/2022/06/16/masuk/11/23/",
"filename": "0000_rakha_fatih_athallah_picture.jpg",
"tujuan": "",
"link": "http://103.140.90.10:8081/face-recognition/client/python/pegawai/grit/2022/06/16/masuk/11/23/0000_rakha_fatih_athallah_picture.jpg"
}
],
"check_out": []
}
}
}
這是我的結構模型。這很重要,因為我想在這個結構中使用 jsondecoder。我想稍后使用 jsondecoder。
import Foundation
struct jsonData : Codable{
var err_code : Int
var data : Data
enum CodingKeys: String, CodingKey {
case err_code = "err_code"
case data = "data"
}
}
struct Data: Codable{
var message : String
var result : Result
}
struct Result : Codable {
var check_in : [Checkin] = []
}
struct Checkin : Codable{
var created_at : String
var late : String
var location : String
var place : String
var folder : String
var tujuan : String
var link : String
enum CodingKeys: String, CodingKey {
case created_at = "created_at"
case late = "late"
case location = "location"
case place = "place"
case folder = "folder"
case tujuan = "tujuan"
case link = "link"
}
}
uj5u.com熱心網友回復:
我們使用CodingKeys以便為JSON.
例如,你有created_at但你不想要下劃線,你要做的是命名你的變數createdAt并在enum添加case createdAt = "created_at"
至于解碼部分,其實很簡單:
do {
//let data = the json data you got.
let decoder = JSONDecoder()
let model = try decoder.decode(jsonData.self, from: data)
}catch {
print(String(describing: error))
}
請注意,我們在命名時不使用小寫字母structs, classes, actors & enums。
編輯:感謝Marek R指出有時.JSONSwiftCodingKeys
uj5u.com熱心網友回復:
我認為您擁有的結構非常接近所需的結構,只需稍作調整,例如:
struct Response: Codable{
var err_code: Int
var data: DataObj
}
struct DataObj: Codable{
var message: String
var result: Result
}
struct Result: Codable {
var check_in: [Checkin]
}
struct Checkin: Codable, Hashable {
var created_at: String
var late: String
var location: String
var place: String
var folder: String
var tujuan: String
var link: String
}
像這樣使用它:
struct ContentView: View {
@State var apiResponse: Response?
var body: some View {
VStack {
if let response = apiResponse {
Text("message: \(response.data.message) ")
Text("check_in.count: \(response.data.result.check_in.count) ")
List {
ForEach(response.data.result.check_in, id: \.self) { chk in
Text("created_at: \(chk.created_at) ")
}
}
}
}
.onAppear {
let jsonStr = """
{
"err_code": 0,
"data": {
"message": "Success",
"result": {
"check_in": [
{
"created_at": "2022-06-20 10:00:37",
"late": "True",
"location": "Jl. H. Asmawi No.63, Beji, Kecamatan Beji, Kota Depok, Jawa Barat 16421, Indonesia",
"place": "GRIT OFFICE",
"folder": "./pegawai/grit/2022/06/20/masuk/10/00/",
"filename": "0000_rakha_fatih_athallah_picture.jpg",
"tujuan": "",
"link": "http://103.140.90.10:8081/face-recognition/client/python/pegawai/grit/2022/06/20/masuk/10/00/0000_rakha_fatih_athallah_picture.jpg"
},
{
"created_at": "2022-06-16 11:23:12",
"late": "True",
"location": "Jl. H. Asmawi No.63, Beji, Kecamatan Beji, Kota Depok, Jawa Barat 16421, Indonesia",
"place": "GRIT OFFICE",
"folder": "./pegawai/grit/2022/06/16/masuk/11/23/",
"filename": "0000_rakha_fatih_athallah_picture.jpg",
"tujuan": "",
"link": "http://103.140.90.10:8081/face-recognition/client/python/pegawai/grit/2022/06/16/masuk/11/23/0000_rakha_fatih_athallah_picture.jpg"
}
],
"check_out": []
}
}
}
"""
// simulated response data
let data = jsonStr.data(using: .utf8)!
do {
self.apiResponse = try JSONDecoder().decode(Response.self, from: data)
print("\n---> apiResponse \(apiResponse)")
}
catch {
print(" error \(error)")
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494325.html
