Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过可编码swift从json获取数据_Json_Swift_Codable - Fatal编程技术网

无法通过可编码swift从json获取数据

无法通过可编码swift从json获取数据,json,swift,codable,Json,Swift,Codable,这是json代码: { "status":"success", "data": [ {"id":"3", "city_name":"Delhi", "city_image":"delhi.png"}, {"id":"4", "city_name":"Mumbai", "city_image":"tickmark.png"} ] } 我的Swift代码: struct c

这是json代码:

{
  "status":"success",
   "data":
     [
       {"id":"3",
        "city_name":"Delhi",
         "city_image":"delhi.png"},
       {"id":"4",
        "city_name":"Mumbai",
        "city_image":"tickmark.png"}
     ]
 }
我的Swift代码:

struct city: Decodable{
    let status : String
    let id: String
    let data : String
    let city_name: String
    let city_image: String
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let jsonUrl = "http://parking.onlinekiduniya.org/api/cityList.php"
        let url = URL(string: jsonUrl)
        URLSession.shared.dataTask(with: url!) {(data, response, error) in
            do {
                let cities = try JSONDecoder().decode([city].self, from: data!)
                for city in cities {
                print(city.id)
            }
            }
            catch {
                print("we got error")
        }
        }.resume()
    }
}
替换

let cities = try JSONDecoder().decode([city].self, from: data!)



您的根目录是一个字典而不是数组

好的,谢谢您的快速响应。我替换了这一行代码,但现在出现了错误-----在其自身初始值内使用的变量value@VidurBahl按照整个答案内容确定打印数据的打印行是什么。?非常感谢@sh_khanThanks,兄弟,你救了我一天:)非常感谢你快速准确的回复。另外,哪种方法是学习swift中json集成的好方法?谢谢你again@VidurBahl首先,您应该学习如何使用正确构造json,然后使用生成swift文件
let root = try JSONDecoder().decode(Root.self, from: data!)
let cities = root.data
cities.forEach {
   print($0.id)
}
struct Root: Codable {
    let status: String
    let data: [City]
}

struct City: Codable {
    let id, cityName, cityImage: String // you can use snake case also

    enum CodingKeys: String, CodingKey {
        case id
        case cityName = "city_name"
        case cityImage = "city_image"
    }
}