如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?
Posted
技术标签:
【中文标题】如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?【英文标题】:How to get data from nested JSON using JSONDecoder in swift 4? 【发布时间】:2018-02-01 10:15:24 【问题描述】:我是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()
我以这种方式得到我的结果:
Gender(result: [something.Gender.Result(genderCategory: "Male"), something.Gender.Result(genderCategory: "Female"), something.Gender.Result(genderCategory: "Transgender"), something.Gender .Result(genderCategory: "Others")])
但是我怎样才能只得到genderCategory的值呢?
【问题讨论】:
let result : [String]
你是说let result : [Result]
?因为result
是一个字典数组,而不是字符串数组,所以当你读取它(解码)时,你就会遇到问题。
这是一个类型不匹配,它的结果是:[结果],我也做过,但我想要一个实际的答案
【参考方案1】:
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)
【讨论】:
对不起,我编辑了我的问题,我想只获取gender_category的值,我该怎么做? 如果我想计算结果的genderCategory中的值总数怎么办? 由于所有键都是非可选的,因此项目数为gender.result.count
以上是关于如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 4 中使用 UnsafeMutablePointer
Swift 4:如何使用 Alamofire 在参数中发布文件?
如何在 Swift 3 中使用 Alamofire 4 解析这个 json?
如何在 Swift 4 中使用 FetchedResultsController 获取 DateSectionTitles