Ios 如何在swift 4中访问项目密钥 我的数据

Ios 如何在swift 4中访问项目密钥 我的数据,ios,arrays,json,swift,url,Ios,Arrays,Json,Swift,Url,如何获取值“Name”的数组列表,您能帮助我吗?您可以试试 {"Regions":null,"Cities":[{"Id":"9605","Name":"YANBAA AS SENAYAH"},{"Id":"15","Name":"ABHA"},{"Id":"13","Name":"AD DAMMAM"},{"Id":"1542","Name":"AL BAHA"},{"Id":"14","Name":"AL MADINAH AL MUNAWWARAH"},{"Id":"2213","Name"

如何获取值“Name”的数组列表,您能帮助我吗?

您可以试试

{"Regions":null,"Cities":[{"Id":"9605","Name":"YANBAA AS SENAYAH"},{"Id":"15","Name":"ABHA"},{"Id":"13","Name":"AD DAMMAM"},{"Id":"1542","Name":"AL BAHA"},{"Id":"14","Name":"AL MADINAH AL MUNAWWARAH"},{"Id":"2213","Name":"AR'AR"},{"Id":"11","Name":"BURAYDAH"},{"Id":"10","Name":"HAIL"},{"Id":"17","Name":"JAZAN"},{"Id":"6","Name":"MAKKAH AL MUKARRAMAH"},{"Id":"3417","Name":"NAJRAN"},{"Id":"3","Name":"RIYADH"},{"Id":"2237","Name":"SAKAKA"},{"Id":"1","Name":"TABUK"},
//

注意:这是正确的json结构

{“地区”:空,“城市”:[{“Id”:“9605”,“姓名”:“YANBAA AS SENAYAH”},{“Id”:“15”,“姓名”:“ABHA”},{“Id”:“13”,“姓名”:“AD DAMMAM”},{“Id”:“1542”,“姓名”:“AL-BAHA”},{“Id”:“14”,“姓名”:“AL-MADINAH AL-MUNAWWARAH”},{“Id”:“2213”,“姓名”:“AR'AR”},{“Id”:“11”,“姓名”:“BURAYDAH”},{“Id”:“10”,“姓名”:“HAIL”{“17”,“姓名”:“Jaid”:“MAKKAH AL-MUKARRAMAH”},{“Id”:“3417”,“姓名”:“NAJRAN”},{“Id”:“3”,“姓名”:“利雅得”},{“Id”:“2237”,“姓名”:“SAKAKA”},{“Id”:“1”,“姓名”:“TABUK”}


与解码步骤一起。我添加了几个防护装置,以便在出现错误时打印错误。一般来说,抛出错误并在适当的级别上进行处理是一种很好的做法

struct Root :Decodable{

    let Cities:[InnerItem]

}

struct InnerItem :Decodable{

    let Id:String

    let Name:String

}

do {

    let arr = try JSONDecoder().decode(Root.self, from: data)

    print(arr.Cities)
}
catch {

    print(error)
}
解码助手。
enum CodingKeys
用于将小写属性转换为大写JSON属性并返回

func work() {
    guard let url = URL(string: "https://mysit.com") else {
        fatalError("url is nil.")
    }

    URLSession.shared.dataTask(with: url) {
        data, response, error in
        guard error == nil else {
            fatalError("\(error!)")
        }
        guard let response = response as? HTTPURLResponse,
            response.statusCode == 200 else {
            fatalError("Response is nil.")
        }
        guard let data = data else {
            fatalError("data is nil.")
        }

        decode(data: data)

    }.resume()
}

func decode(data: Data) {
    let decoder = JSONDecoder.init()
    let welcome = try! decoder.decode(Welcome.self, from: data)

    print(welcome.cities.first!)
}

有些人使用服务,如将JSON字符串转换为特定的编程语言。这使事情更快、更简单。

显示JSONDecoder代码。从url JSON获取数据
struct Welcome: Codable {
    var regions: [Region]?
    let cities: [City]

    enum CodingKeys: String, CodingKey {
        case regions = "Regions"
        case cities = "Cities"
    }
}

struct City: Codable {
    let id, name: String

    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case name = "Name"
    }
}

struct Region: Codable {
    let id, name: String

    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case name = "Name"
    }
}
struct Welcome: Codable {
    var regions: [Region]?
    let cities: [City]

    enum CodingKeys: String, CodingKey {
        case regions = "Regions"
        case cities = "Cities"
    }
}

struct City: Codable {
    let id, name: String

    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case name = "Name"
    }
}

struct Region: Codable {
    let id, name: String

    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case name = "Name"
    }
}
let responseData = try JSONSerialization.jsonObject(with: (response["Cities"] as! String).data(using: String.Encoding.utf8)!, options: []) as! [[String: Any]]

for item in responseData{
  let name =  item["Name"] as! String
}