gpt4 book ai didi

json - 使用 Swift 3 解析 JSON

转载 作者:行者123 更新时间:2023-12-02 15:17:24 26 4
gpt4 key购买 nike

我有这个 json 数据,我想在 Swift 3 中使用它。我正在学习 Swift 并构建一个非常基本的应用程序,它在 tableUIView 中显示来自 JSON 的项目列表。

{
"expertPainPanels" : [
{
"name": "User A",
"organization": "Company A"
},
{
"name": "User B",
"organization": "Company B"
}
]
}

我正在尝试使用 Swift 3 获取这些数据。

if (statusCode == 200) {
do{
let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments) // [[String:AnyObject]]

/*
If I do this:

let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:Any]

if let experts = json?["expertPainPanels"] as! [String: Any] {
I get "Initializer for conditional binding must have Optional type, not '[String: Any]'"

*/


// Type 'Any' has no subscript members.
if let experts = json["expertPainPanels"] as? [String: AnyObject] {

for expert in experts {
let name = expert["name"] as? String
let organization = expert["organization"] as? String
let expertPainPanel = ExpertPainPanel(name: name, organization: organization)!
self.expertPainPanels += [expertPainPanel]
self.tableView.reloadData()
self.removeLoadingScreen()
}
}
}catch {
print("Error with Json: \(error)")
}
}

它在 Swift 2 中运行良好。我更新到 Swift 3 破坏了代码。我读了几个 SO,但我仍然很难理解它。我应用了一些建议,包括 JSON Parsing in Swift 3 ,但我仍然无法修复我遇到的错误。

最佳答案

从 Swift 3 开始,您需要尽早进行转换。

这一行:

let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments)

应该变成这样:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String : AnyObject]

这是因为 JSONSerialization 现在返回 Any,它不会为 [] 运算符实现变体。确保您安全地解开 Actor 阵容并采取常见措施以确保您的程序不会崩溃。

编辑:您的代码或多或少应该像这样。

let data = Data()
let json = try JSONSerialization.jsonObject(with: data, options:.allowFragments) as! [String : AnyObject]
if let experts = json["expertPainPanels"] as? [String: AnyObject] {

关于json - 使用 Swift 3 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39458836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com