如何在 swift 4 中使用 JSON 解码器从嵌套的 JSON 获取数据?
How to get data from nested JSON using JSONDecoder in swift 4?
我是swift的新手,首先我想知道编码和解码之间的主要区别是什么。其次,我尝试从响应中获取特定值,如下所示:
我想解码 gender_category 的值并将其放入 piker,这是我到目前为止所做的:
struct Gender: Decodable {
let result : [Result]
enum CodingKeys :String, CodingKey {
case result
}
struct Result: Decodable {
let genderCategory: String
enum CodingKeys : String, CodingKey {
case genderCategory = "gender_category"
}
}
}
我得到响应的代码是这样的:
func getGenderValueFromJSON() {
let url = URL(string: "http://www.----------.com/GenderList/get")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil{
do{
let result = try JSONDecoder().decode(Gender.self, from: data!)
print(result)
}catch let error as NSError{
print("Parse Error\(error)")
}
}
}.resume()
}
我是这样得到结果的:
性别(结果:[something.Gender.Result(性别类别:"Male"),something.Gender.Result(性别类别:"Female"),something.Gender.Result(性别类别:"Transgender"), something.Gender.Result(性别类别: "Others")])
但是我如何只获取 genderCategory 的值?
result
是Result
的数组,不是String
let result : [Result]
这是解码所有键的结构
struct Gender: Decodable {
let message : String
let statusCode : Int
let result : [Result]
enum CodingKeys :String, CodingKey {
case message, statusCode = "status_code", result
}
struct Result: Decodable {
let genderCategory: String
let id : String
enum CodingKeys : String, CodingKey {
case genderCategory = "gender_category", id
}
}
}
获取 gender_category
个值
let gender = try JSONDecoder().decode(Gender.self, from: data!)
for item in gender.result {
print(item.genderCategory)
}
我是swift的新手,首先我想知道编码和解码之间的主要区别是什么。其次,我尝试从响应中获取特定值,如下所示:
我想解码 gender_category 的值并将其放入 piker,这是我到目前为止所做的:
struct Gender: Decodable {
let result : [Result]
enum CodingKeys :String, CodingKey {
case result
}
struct Result: Decodable {
let genderCategory: String
enum CodingKeys : String, CodingKey {
case genderCategory = "gender_category"
}
}
}
我得到响应的代码是这样的:
func getGenderValueFromJSON() {
let url = URL(string: "http://www.----------.com/GenderList/get")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error == nil{
do{
let result = try JSONDecoder().decode(Gender.self, from: data!)
print(result)
}catch let error as NSError{
print("Parse Error\(error)")
}
}
}.resume()
}
我是这样得到结果的:
性别(结果:[something.Gender.Result(性别类别:"Male"),something.Gender.Result(性别类别:"Female"),something.Gender.Result(性别类别:"Transgender"), something.Gender.Result(性别类别: "Others")])
但是我如何只获取 genderCategory 的值?
result
是Result
的数组,不是String
let result : [Result]
这是解码所有键的结构
struct Gender: Decodable {
let message : String
let statusCode : Int
let result : [Result]
enum CodingKeys :String, CodingKey {
case message, statusCode = "status_code", result
}
struct Result: Decodable {
let genderCategory: String
let id : String
enum CodingKeys : String, CodingKey {
case genderCategory = "gender_category", id
}
}
}
获取 gender_category
个值
let gender = try JSONDecoder().decode(Gender.self, from: data!)
for item in gender.result {
print(item.genderCategory)
}