使用日期解码swift4中的JSON数据

时间:2018-01-03 14:57:54

标签: json swift4

我是新手,并且无法理解这一切是如何运作的。

我有这个结构:

struct EventDetail:Decodable {

    let EventName: String
    let EventInformation: String
    let EventStartDate: Date
    let EventEndDate: Date
}

这个func下载json:

func downloadJSON(completed: @escaping () -> ()) {

    let url = URL(string: "http://someurl.php")

    URLSession.shared.dataTask(with: url!) { (data, response, error) in

        if error == nil {
            do {


                self.events = try JSONDecoder().decode([EventDetail].self, from: data!)


                DispatchQueue.main.async {
                    completed()
                }
            }catch {
                print(error)
            }
        }
    }.resume()
}

}

这是我得到的JSON错误:

  

JSON错误   typeMismatch(Swift.Double,Swift.DecodingError.Context(codingPath:[Foundation。(_ JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue:“Index 0”,intValue:Optional(0)),Cosplay_Life.EventDetail。(CodingKeys in _52013DB7ECF3BE1EBFBF83BE6BA8F9E9).EventStartDate] ,debugDescription:“预计解码Double但发现字符串/数据。”,underlyingError:nil))

如果EventStartDateEventEndDate是一个字符串,这一切似乎都有效,但我希望将它作为Date,因为我稍后会使用日期字段对数据进行排序。下载的值格式为“yyyy-MM-dd”eks:“2017-02-25”我做错了什么?

1 个答案:

答案 0 :(得分:-1)

日期是双倍的,因为它是自纪元以来的毫秒数。

试试这个:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
// Use format appropriate to your JSON String.  This is for ISO-8601
// You MUST account for the milliseconds even if you don't want them 
// or it won't parse properly
dateFormatter.dateFormat = "yy-MM-dd'T'HH:mm:ss.SSS" 

eventDetail.EventStartDate = dateFormatter.date(from: jsonEventStartDateField)!
eventDetail.EventEndDate   = dateFormatter.date(from: jsonEventEndDateField)!