我想使用并解析来自CuteRadioAPI http://marxoft.co.uk/doc/cuteradio-api/stations/的无线电列表
GET请求的结果如下所示:http://marxoft.co.uk/api/cuteradio/stations?limit=2&sort=title&sortDescending=false&approved=1&offset=50%22}
看起来它并不是一个真正的JSON结构。
我试着这样解码:
struct Radio:Codable {
var approved: Bool?
var country: String?
var creatorId: Int?
var description: String?
var genre: String?
var id: Int?
var language: String?
var lastPlayed: String?
var playCount: Int?
var source: String?
var title: String?
}
struct CuteRadioReturn:Codable {
var Radios : [Radio]
}
let url = URL(string: "http://marxoft.co.uk/api/cuteradio/stations")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
self.showAlert(title: "Erreur réseau", message: "\(error!.localizedDescription)")
return
}
guard let data = data else {
self.showAlert(title: "Erreur données", message: "Liste des radios non disponible !")
return
}
do {
print ("try")
guard let radios = try? JSONDecoder().decode(CuteRadioReturn.self, from: data) else {
print("Error: Couldn't decode JSON")
return
}
}
print (radios.Radios.count)
}
task.resume()
我在收音机里总是听不到..。
有什么好的办法吗?
发布于 2018-06-04 02:38:48
在json中使用可编码的任何字典转换为结构或类
在Json中,{}
是字典,[]
是数组
根据这个,你的模型将是
模型:
import Foundation
struct CuteRadioReturn: Codable {
let items: [Radio]
let next: String
}
struct Radio: Codable {
let id: Int
let title, description, genre, country: String
let language, source: String
let playCount: Int
let lastPlayed: String
let creatorID: Int
let approved: Bool
enum CodingKeys: String, CodingKey {
case id, title, description, genre, country, language, source, playCount, lastPlayed
case creatorID = "creatorId"
case approved
}
}
// MARK: Convenience initializers
extension CuteRadioReturn {
init(data: Data) throws {
self = try JSONDecoder().decode(CuteRadioReturn.self, from: data)
}
}
和接口调用
let url = URL(string: "http://marxoft.co.uk/api/cuteradio/stations")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
if let cuteRadioReturn = try? CuteRadioReturn.init(data: data){
print(cuteRadioReturn.items)
}
}
task.resume()
发布于 2018-06-04 02:28:37
响应是一个字典而不是数组,它的主键是items,将其更改为
struct CuteRadioReturn:Codable {
var items : [Radio]
var next:String
}
https://stackoverflow.com/questions/50669618
复制相似问题