提问人:bumblebee 提问时间:9/15/2023 最后编辑:Brian Tompsett - 汤莱恩bumblebee 更新时间:9/15/2023 访问量:70
如何从 API 的结构内获取解码数据 [已关闭]
How can I get decoded data from a struct inside a struct from an API [closed]
问:
我正在尝试学习如何使用 AlamoFire,我想获取此结构中结构的值。如何实现这一点?MyData
import Foundation
import Alamofire
struct MyData : Codable {
let id: Int
let uid : String
let password : String
let first_name : String
let last_name :String
let username : String
let email : String
let avatar : String
let gender : String
let phone_number : String
let social_insurance_number : String
let date_of_birth : String
struct employment : Codable {
let title : String
let key_skill : String
}
struct address : Codable {
var city : String
var street_name : String
var street_address : String
var zip_code : String
var state : String
var country : String
struct coordinates : Codable {
var lat : Int
var lng : Int
}
}
struct credit_card : Codable{
let cc_number : String
}
struct subscription : Codable {
var plan : String
var status : String
var payment_method : String
var term : String
}
}
func getApi() {
let url = "https://random-data-api.com/api/v2/users"
AF.request(url).responseData { response in
debugPrint(response)
guard let data = response.data
else{
return
}
do {
let decoder = JSONDecoder()
let json = try decoder.decode(MyData?.self, from: data)
decoder.keyDecodingStrategy = .convertFromSnakeCase
print("SOCIAL INSURANCE NUMBER : \(String(describing: json!.social_insurance_number))")
}
catch{
print(error)
}
}
}
我尝试从 API 获取数据。我的数据模型在结构中有一个结构。我无法获取父结构中的结构,但可以获取父结构中声明的变量的值。
答:
0赞
KerryDong
9/15/2023
#1
在 your 中插入以下代码以继续解码。MyData
let employment: Employment
let address: Address
let credit_card: CreditCard
let subscription: Subscription
不要忘记将结构上的首字母大写,添加并更改为 .var coordinates
Int
Double
struct Employment: Codable {
// ...
}
struct Address: Codable {
// ...
var coordinates: Coordinates // Add this
struct Coordinates: Codable {
var lat: Double // Change Int to Double
var lng: Double // Change Int to Double
}
}
struct CreditCard: Codable {
// ...
}
struct Subscription: Codable {
// ...
}
评论
MyData?.self
毫无意义。将其替换为 .在行之后应用键解码策略也是没有意义的。MyData.self
decode
let date_of_birth : String
MyData
let address: Address
.convertFromSnakeCase
last_name
lastName
responseDecodable(of:)
responseData