在 swift 4 中获取 json 有啥问题?
Posted
技术标签:
【中文标题】在 swift 4 中获取 json 有啥问题?【英文标题】:what is wrong in the getting json in swift 4?在 swift 4 中获取 json 有什么问题? 【发布时间】:2017-10-07 18:04:26 【问题描述】:我有一个天气预报 JSON,我在 Swift 4 中使用了新方法来序列化带有结构的 JSON,但问题是当我想打印 JSON 时我会收到这个:
typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [], debugDescription: "期望解码 Array 但找到了一个字典。",底层错误: nil))
这是我的 JSON 代码:
struct currently : Decodable
let summary : String?
let temperature : Float?
let timezone : String
init(json : [String : Any])
summary = json["summary"] as? String ?? ""
temperature = json["temperature"] as? Float ?? -1
timezone = json["timezone"] as? String ?? ""
这是获取 JSON 的代码:
let jsonURL = "https://api.darksky.net/forecast/[code]/\(ViewController.latitude),\(ViewController.longitude)"
guard let url = URL(string : jsonURL) else
return
URLSession.shared.dataTask(with: url) (data , response , error) in
guard let data = data else return
do
let currentlies = try JSONDecoder().decode(currently.self , from : data)
print(currentlies.timezone)
print(currentlies.summary)
print(currentlies.temperature)
catch
print(error)
.resume()
【问题讨论】:
错误很明显。您的 JSON 根是字典,但您将其视为数组。 那么如何在 swift 4 中使用字典? " 如何在 swift 4 中使用字典" 在 google 中搜索 这是个好主意 :))) 但请帮我写答案 将您的currentlies
变量更改为字典。将调用的第一个参数 decode
更改为具有正确类型的字典。
【参考方案1】:
你可以这样使用:
struct Response : Decodable
let timezone : String
let currently: Currently
struct Currently: Decodable
let summary: String
let temperature: Double
let jsonURL = "https://api.darksky.net/forecast/[code]/\(ViewController.latitude),\(ViewController.longitude)"
guard let url = URL(string : jsonURL) else
return
URLSession.shared.dataTask(with: url) (data , response , error) in
guard let data = data else return
do
let currentlies = try JSONDecoder().decode(Response.self , from : data)
print(currentlies.timezone)
print(currentlies.currently.summary)
print(currentlies.currently.temperature)
catch
print(error)
.resume()
【讨论】:
没错,这就是我想知道的,非常感谢以上是关于在 swift 4 中获取 json 有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
在 [CLLocation] SWIFT 中保存 JSON 结果
如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?
使用 Swift 4 和 Xcode 9 获取 JSON 数据