【问题标题】:How to get data from nested JSON using JSONDecoder in swift 4?如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?
【发布时间】: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 是一个字典数组,而不是字符串数组,所以当你读取它(解码)时,你就会遇到问题。
  • 这是一个类型不匹配,它的结果是:[结果],我也做过,但我想要一个实际的答案

标签: arrays json xcode jsondecoder


【解决方案1】:

resultResult 的数组,而不是 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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多