作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了练习,我创建了一个非常简单的json数据,但是在JSONDecoder().decode时总是解码错误。我尝试了一些方法来修改我的结构,但都得到了相同的错误(打印“error0”)。代码在下面。
struct ss : Codable {
var a : String
var b : String
}
let js = "[{\"a\":\"1\",\"b\":\"2\"},{\"c\":\"3\",\"d\":\"4\"}]"
let data = js.data(using: .utf8)
let a = [ss].self
do {
if let s = try? JSONDecoder().decode(a, from : data!) {
print(s[0].a)
}else{
print("error0")
}
}catch{
print("error1")
}
最佳答案
你的JSON
替换有问题
let js = "[{\"a\":\"1\",\"b\":\"2\"},{\"c\":\"3\",\"d\":\"4\"}]"
与
let js = "[{\"a\":\"1\",\"b\":\"2\"},{\"a\":\"3\",\"b\":\"4\"}]"
另一个字典没有键 a
和 b
这就是为什么 JSONDecoder
不能解码
现在您的更新代码将是:
struct ss : Codable {
var a : String
var b : String
}
let js = "[{\"a\":\"1\",\"b\":\"2\"},{\"a\":\"3\",\"b\":\"4\"}]"
let data = js.data(using: .utf8)
let a = [ss].self
do {
let jsonDecoder = JSONDecoder()
let s = try jsonDecoder.decode(a, from: data!)
print(s[0].a) //"1\n"
} catch {
print(error)
}
PS:正如@Milander 建议的那样,如果您不想修复 JSON
,您可以在 Struct
中创建 optional
属性,例如
struct ss : Codable {
let a, b, c, d: String?
}
关于swift - 如何在 swift4 中为这个 json 数据创建一个结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019504/
我是一名优秀的程序员,十分优秀!