在 swift4 中解析 Json
parsing Json in swift4
你好我试着解码Json:
{"result":[
{"ID":"80",
"time":"09:00:00",
"status":[
{"status":0,"kirpeja_id":"74","name":"Natalja","image":"natalija255.png","duration":"00:20:00"},
{"status":1,"kirpeja_id":"80","name":"Lina","image":"kazkas.png","duration":"00:30:00"},
{"status":0,"kirpeja_id":"82","name":"Rasa ","image":"IMG_20170906_171553.jpg","duration":"00:40:00"}
]},
{"ID":"81",
"time":"09:10:00",
"status":[
{"status":0,"kirpeja_id":"66","name":"Ilona","image":"ilona_new.jpg","duration":"00:30:00"},
{"status":0,"kirpeja_id":"74","name":"Natalja","image":"natalija255.png","duration":"00:20:00"},
{"status":0,"kirpeja_id":"80","name":"Lina","image":"kazkas.png","duration":"00:30:00"},
{"status":0,"kirpeja_id":"82","name":"Rasa ","image":"IMG_20170906_171553.jpg","duration":"00:40:00"}
]},
...
这是我的 类
class TimeStatusResult: Codable {
let result: [TimeStatus]
init (result:[TimeStatus]) {
self.result = result
}
}
class TimeStatus: Codable {
let ID:String?
let time: String?
let status: [Status]
init (status:[Status]) {
self.ID = ""
self.time = ""
self.status = status
}
}
class Status: Codable {
let status: String?
let kirpeja_id: String?
let name: String?
let image: String?
let duration: String?
init () {
self.status = ""
self.kirpeja_id = ""
self.name = ""
self.image = "nophoto.jpg"
self.duration = ""
}
}
这里是我的 json 函数
final let jsonUrl = URL(string: "http://**********/getlaikas_new.php")
private var timeStatusResult = [TimeStatus]()
func downloadJson () {
guard let downloadURL = jsonUrl else {return}
var request = URLRequest(url: downloadURL)
request.setValue("application/x-www-form-urlencoded",forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "data=\(pInfo.paslaugosData!)&salonId=\(pInfo.ID!)&paslaugos_id=\(pInfo.paslaugosId!)"
request.httpBody = postString.data(using: .utf8, allowLossyConversion: true)
URLSession.shared.dataTask(with: request) {data, urlResponse, error in
guard let data = data , error == nil, urlResponse != nil else {
print ("something wrong")
return }
print ("downloaded!")
do
{
let decoder = JSONDecoder()
print (data)
let downloadedTimeStatus = try decoder.decode(TimeStatusResult.self, from: data)
self.timeStatusResult = downloadedTimeStatus.result
DispatchQueue.main.async {
// self.kirpejosPaslaugosTable.reloadData()
}
} catch {
print ("something wrong after download")
}
}.resume()
}
这一行我有问题
let downloadedTimeStatus = try decoder.decode(TimeStatusResult.self, from: data)
有人可以帮助我吗? :(
错误很明显:
...burzua_1.Status.(CodingKeys in _479ABD1AF7892C9F2FD23EC23214E088).status], debugDescription: "Expected to decode String but found a number instead."
键 status
的值是 而不是 双引号,所以它是一个 Int
class Status: Codable {
let status: Int
...
请不要粗心地将所有属性声明为可选。例如 status
以及所有其他键都存在于所有 Status
词典中。
你好我试着解码Json:
{"result":[ {"ID":"80", "time":"09:00:00", "status":[ {"status":0,"kirpeja_id":"74","name":"Natalja","image":"natalija255.png","duration":"00:20:00"}, {"status":1,"kirpeja_id":"80","name":"Lina","image":"kazkas.png","duration":"00:30:00"}, {"status":0,"kirpeja_id":"82","name":"Rasa ","image":"IMG_20170906_171553.jpg","duration":"00:40:00"} ]}, {"ID":"81", "time":"09:10:00", "status":[ {"status":0,"kirpeja_id":"66","name":"Ilona","image":"ilona_new.jpg","duration":"00:30:00"}, {"status":0,"kirpeja_id":"74","name":"Natalja","image":"natalija255.png","duration":"00:20:00"}, {"status":0,"kirpeja_id":"80","name":"Lina","image":"kazkas.png","duration":"00:30:00"}, {"status":0,"kirpeja_id":"82","name":"Rasa ","image":"IMG_20170906_171553.jpg","duration":"00:40:00"} ]}, ...
这是我的 类
class TimeStatusResult: Codable {
let result: [TimeStatus]
init (result:[TimeStatus]) {
self.result = result
}
}
class TimeStatus: Codable {
let ID:String?
let time: String?
let status: [Status]
init (status:[Status]) {
self.ID = ""
self.time = ""
self.status = status
}
}
class Status: Codable {
let status: String?
let kirpeja_id: String?
let name: String?
let image: String?
let duration: String?
init () {
self.status = ""
self.kirpeja_id = ""
self.name = ""
self.image = "nophoto.jpg"
self.duration = ""
}
}
这里是我的 json 函数
final let jsonUrl = URL(string: "http://**********/getlaikas_new.php")
private var timeStatusResult = [TimeStatus]()
func downloadJson () {
guard let downloadURL = jsonUrl else {return}
var request = URLRequest(url: downloadURL)
request.setValue("application/x-www-form-urlencoded",forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "data=\(pInfo.paslaugosData!)&salonId=\(pInfo.ID!)&paslaugos_id=\(pInfo.paslaugosId!)"
request.httpBody = postString.data(using: .utf8, allowLossyConversion: true)
URLSession.shared.dataTask(with: request) {data, urlResponse, error in
guard let data = data , error == nil, urlResponse != nil else {
print ("something wrong")
return }
print ("downloaded!")
do
{
let decoder = JSONDecoder()
print (data)
let downloadedTimeStatus = try decoder.decode(TimeStatusResult.self, from: data)
self.timeStatusResult = downloadedTimeStatus.result
DispatchQueue.main.async {
// self.kirpejosPaslaugosTable.reloadData()
}
} catch {
print ("something wrong after download")
}
}.resume()
}
这一行我有问题
let downloadedTimeStatus = try decoder.decode(TimeStatusResult.self, from: data)
有人可以帮助我吗? :(
错误很明显:
...burzua_1.Status.(CodingKeys in _479ABD1AF7892C9F2FD23EC23214E088).status], debugDescription: "Expected to decode String but found a number instead."
键 status
的值是 而不是 双引号,所以它是一个 Int
class Status: Codable {
let status: Int
...
请不要粗心地将所有属性声明为可选。例如 status
以及所有其他键都存在于所有 Status
词典中。