【发布时间】:2021-06-08 00:03:31
【问题描述】:
基本上我想解析从 url 接收到的 JSON 并在警报弹出窗口中显示数据。
我可以使用下面的简单数组来做到这一点,但不知道如何使用来自 URL 的 JSON 数组来做到这一点。
目前工作:
let jsonObj:[String: Any] = ["error": [
"email": ["The email has already been taken."],
"phone": ["The phone has already been taken."]]
]
if let errorMsgs = jsonObj["error"] as? [String: [String]] {
let errMsg = errorMsgs.values.map { $0.reduce("", +) }.joined(separator: "\n")
print(errMsg)
self.presentAlert(withTitle: "Try again", message: errMsg)
}
JSON 数组:
var structure = [Struct]()
private func fetchJSON() {
guard let url = URL(string: "url.com")
else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "code=\(codeValue)".data(using: .utf8)
URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data else { return }
do {
self.structure = try JSONDecoder().decode([Struct].self,from:data)
}
catch {
print(error)
}
}.resume()
}
struct Struct: Decodable {
let id: Int
let reasons: String
}
示例 JSON 数组:
[
{
"id": 1,
"reasons": "Test"
},
{
"id": 3,
"reasons": "Test"
}
]
如何从数组中获取原因字符串以填充到类似于上面的警报中。
更新:
为了打印警报中的记录,我做了以下操作,但它只在警报中打印一条记录:
for item in self.structure {
print(item.reasons)
let errMsg = [item.reasons].compactMap { $0 }.joined(separator: "\n")
self.presentAlert(withTitle: "Try again", message: errMsg)
}
【问题讨论】:
-
您如何在
UITableView中显示数据?并在从 backed 获取数据后打印self.structure并检查是否有任何信息。 -
道歉是错误的 - 我没有 tableview,我只是使用该函数来解析 JSON 数组
-
不用担心。打印
self.structure并检查您是否先从服务器获取任何内容。 -
我需要显示类似于工作示例的数组中的原因值
-
是的,我得到了结果