在 Swift 中使用 nil 值解析 JSON
Posted
技术标签:
【中文标题】在 Swift 中使用 nil 值解析 JSON【英文标题】:Parsing JSON in Swift with nil values 【发布时间】:2020-04-23 21:10:57 【问题描述】:我正在使用 Swift 5 和 Xcode 11。我正在尝试解析从该网站返回的 JSON,这是我正在设计的 API。 http://aarontcraig-001-site1.htempurl.com/api/values
从该 API 调用返回的 JSON 如下:
[
"Businesses": [],
"Customer": null,
"ID": 1,
"Name": "Coffee Shop",
"CustomerID": null
,
...
]
它继续一个数组。有些条目是空的,有些则不是。但是,当我解析它时,它们都返回 nil。
这是我的代码:
let url = "http://aarontcraig-001-site1.htempurl.com/api/values"
guard let finalURL = URL(string: url) else
return
URLSession.shared.dataTask(with: finalURL) (data, response, error) in
guard let data = data else return
do
let myData = try JSONDecoder().decode([Value].self, from: data)
print(myData)
catch
print("Error parsing \(error)")
以及我用来捕捉这一切的结构:
struct Value: Codable
let businesses : [String]?
let customer : String?
let iD : Int?
let name : String?
let customerID : String?
我得到的只是 nil 值,尽管其中很多显然不是。这就是它返回的内容。
[Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID: nil), Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID : nil), Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID: nil), Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID : nil), Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID: nil), Sunrise.Value(businesses: nil, customer: nil, iD: nil, name: nil, customerID :无)]
我做错了什么?即使我尝试仅捕获每个条目都有值的名称,它也会将其设置为 nil。我正在接收数据,因为如果我在数据处设置断点,我可以在那里看到它。
【问题讨论】:
键不匹配。 “客户 ID”!=“客户 ID”。不要让它们成为可选的,你会看到的。我认为id
不应该永远为零(我希望模型)。见***.com/questions/44396500/…
这能回答你的问题吗? How do I use custom keys with Swift 4's Decodable protocol?
【参考方案1】:
使用 CodingKeys
将 JSON 中的属性名称映射到结构的成员:
struct Value: Codable
let businesses: [String]?
let customer: String?
let id: Int
let name: String
let customerID: String?
enum CodingKeys: String, CodingKey
case businesses = "Businesses"
case customer = "Customer"
case id = "ID"
case name = "Name"
case customerID = "CustomerID"
【讨论】:
以上是关于在 Swift 中使用 nil 值解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 中将 JSON `null` 值传递给`nil` 值?