【发布时间】:2020-12-09 20:14:27
【问题描述】:
我尝试将 JSON 转换为数组,但遇到了一些问题,不知道如何解决。 我使用 Swift 5 和 Xcode 12.2。
这是我的 PHP 查询中的 JSON:
[
{
Crewcode = AAA;
Phone = 5553216789;
Firstname = Philip;
Lastname = MILLER;
email = "pmiller@xxx.com";
},
{
Crewcode = BBB;
Phone = 5557861243;
Firstname = Andrew;
Lastname = DEAN;
email = "adean@xxx.com";
}
]
这是我的 Swift 代码:
let url: URL = URL(string: "https://xxx.php")!
let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)
let task = defaultSession.dataTask(with: url) { (data, response, error) in
if error != nil {
print("Failed to download data")
}
else {
print("Data downloaded")
do {
if let jsondata = (try? JSONSerialization.jsonObject(with: data!, options: [])) {
print(jsondata)
struct Crew: Decodable {
var Code: String
var Phone: String
var Firstname: String
var Lastname: String
var email: String
}
let decoder = JSONDecoder()
do {
let people = try decoder.decode([Crew].self, from: jsondata as! Data)
print(people)
}
catch {
print(error)
}
}
}
}
}
task.resume()
当我运行我的代码时,我收到以下错误:
无法将“__NSArrayI”(0x7fff86b930b0) 类型的值转换为“NSData”(0x7fff86b911e8)。 2020-12-09 14:52:48.988468+0100 FTL[57659:3019805] 无法将“__NSArrayI”(0x7fff86b930b0)类型的值转换为“NSData”(0x7fff86b911e8)。 无法将“__NSArrayI”(0x7fff86b930b0)类型的值转换为“NSData”(0x7fff86b911e8)。
如果你有任何想法来做对,我提前感谢你在这方面的帮助!
【问题讨论】:
-
您将 JSONSerialization 与 JSONDecoder 混合使用。这些是不相关的(前者是一个长期存在的 ObjC 系统;后者是一个较新的 Swift 系统)。 JSONDecoder 期望您将实际数据传递给它。删除 JSONSerialization 代码。但请注意,您的结构要求您的 JSON 不包含
Code参数。如果它是可选的,那么您需要将其设为可选 (String?)。 -
非常感谢您的帮助!