相关疑难解决方法(0)

如何使用Swift4中的Codable转换带有可选小数秒的日期字符串

我正在用Swift的Codable替换旧的JSON解析代码,并且遇到了一些麻烦.我想这不是一个可编码的问题,因为它是一个DateFormatter问题.

从结构开始

 struct JustADate: Codable {
    var date: Date
 }
Run Code Online (Sandbox Code Playgroud)

和一个json字符串

let json = """
  { "date": "2017-06-19T18:43:19Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在让我们解码

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601

let data = json.data(using: .utf8)!
let justADate = try! decoder.decode(JustADate.self, from: data) //all good
Run Code Online (Sandbox Code Playgroud)

但是,如果我们更改日期以使其具有小数秒,例如:

let json = """
  { "date": "2017-06-19T18:43:19.532Z" }
"""
Run Code Online (Sandbox Code Playgroud)

现在它打破了.日期有时会以小秒数回归,有时则不会.我以前解决它的方式是在我的映射代码中我有一个转换函数,它尝试使用和不使用小数秒的dateFormats.我不太确定如何使用Codable来处理它.有什么建议?

nsdateformatter swift dateformatter swift4 codable

30
推荐指数
2
解决办法
6430
查看次数

使用 Swift 解码日期时出错

例如我的 JSON 看起来像这样:

{ 
   createdAt = "2018-06-13T12:38:22.987Z"  
}
Run Code Online (Sandbox Code Playgroud)

我的结构看起来像这样:

struct myStruct {
    let createdAt: Date
}
Run Code Online (Sandbox Code Playgroud)

像这样解码:

let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
Run Code Online (Sandbox Code Playgroud)

当我解码时,我收到此错误:

解码失败,dataCorrupted(Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "results", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "createdAt", intValue: nil)], debugDescription: "预期日期字符串为 ISO8601 格式。",underlyingError: nil))

我知道它说字符串应该是 ISO8601 格式的,但不是吗?

json ios swift

2
推荐指数
1
解决办法
1224
查看次数

使用 Codable 问题解码 JSON。keyNotFound 错误信息

我在解码 JSON 时遇到问题。我正在尝试解码我​​的 JSON

let temp = try JSONDecoder().decode([LastTemperatureResponse].self, from: data).

我的Codable结构如下:

struct LastTemperatureResponseElement: Codable {
    let measurement: Measurement
}

struct Measurement: Codable {
    let ts: String
    let sensors: [VportSensor]
}

struct VportSensor: TemperatureSensor, Codable {
    var lastUpdate: String!

    let address, description: String
    let status: String
    let temperature: Double
} 
Run Code Online (Sandbox Code Playgroud)

好吧,如果我试图解码我的 JSON,我会收到很清楚的错误消息

keyNotFound(CodingKeys(stringValue: "status", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "measurement", intValue: nil), CodingKeys(stringValue: "sensors", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No …
Run Code Online (Sandbox Code Playgroud)

json swift codable

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

swift ×3

codable ×2

json ×2

dateformatter ×1

ios ×1

nsdateformatter ×1

swift4 ×1