如何使用Decodable解析json?

时间:2018-09-19 11:01:46

标签: swift decodable

当我尝试用可解码的生日解析json时,结果为零。 我应该使用什么日期格式的任何建议或代码示例。 我的日期格式包括时区。

我的问题是生日未到。如何解析可解码的出生日期?

我的json:

{
    "id": 1,
    "name": "fatih",
    "birddate": "2018-09-19T11:36:00.4033163+03:00",
    "total": 0.9,
    "isTest": false
}

这是我的结构:

struct TestDTO : Decodable {
    var id:Int?
    var name : String?
    var birtdate : Date?
    var total : Double?
    var isTest : Bool?
}

RestClientServiceTest().CallRestService(matching: cmd, completion: { (data) in
            do{

                let decoder = JSONDecoder()
                decoder.dateDecodingStrategy = .formatted(dateFormatter)
                let stories = try decoder.decode(TestDTO.self, from: data!)
                print(data)
            }catch let error{
                print("Json Parse Error : \(error)")
            }
        })

2 个答案:

答案 0 :(得分:3)

所以,在操场上玩耍吧……

let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SZ"
let value = "2018-09-19T11:36:00.4033163+03:00"
print(format.date(from: value))

打印2018-09-19 08:36:00 +0000

所以要进一步飞跃...

let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SZ"

let text = """
{
"id": 1,
"name": "fatih",
"birddate": "2018-09-19T11:36:00.4033163+03:00",
"total": 0.9,
"isTest": false
}
"""

struct TestDTO : Decodable {
    var id:Int?
    var name : String?
    var birddate : Date?
    var total : Double?
    var isTest : Bool?
}

do{
    let jsonData = text.data(using: .utf8)
    let decoder = JSONDecoder()
    decoder.dateDecodingStrategy = .formatted(format)
    let stories = try decoder.decode(TestDTO.self, from: jsonData!)
    print(stories)
}catch let error{
    print("Json Parse Error : \(error)")
}

打印...

TestDTO(id: Optional(1), name: Optional("fatih"), birddate: Optional(2018-09-19 08:36:00 +0000), total: Optional(0.9), isTest: Optional(false))

您可能会发现Easy Skeezy Date Formatting for Swift有一定用途

答案 1 :(得分:0)

  1. 首先,您在struct中使用的名称是错误的birddate-错字。
  2. 第二个不要将其设置为Date

String的形式获取数据,并且在使用时与String一起使用。

您可以在SO上搜索NSDateFormatter