我想从PHP到我的应用程序获得多个 jsonObject 。问题是我似乎无法为我的应用程序获取多个对象。以下是我想要做的一个例子:
PHP文件:
<?php
echo json_encode([$value1, $value2]);
?>
我使用了如下所示的dataTask
方法将数据从PHP传递到我的Swift应用程序。
let task = URLSession.shared.dataTask(with: request) { (data: [Data?],
response: URLResponse?, error: Error?) in
var result = [Conversation]()
var chck = [String]()
do{
result = try JSONDecoder().decode([Conversation].self, from: data![0]) as Data)
chck = try JSONDecoder().decode([String].self, from: data![1]) as Data)
}catch{
print("error"+error.localizedDescription)
}
//do something
}
task.resume()
显然,我没有得到这两个变量。我试图将$value1
和$value2
放在一个数组中,然后将它回显给应用程序,但显然它对我不起作用。 data![0]
和data![1]
会出错。有人可以借给我一只手吗?
答案 0 :(得分:2)
我在您的Swift代码中推断$value1
和$value2
是两种不同类型的结果。对于异构对象的集合,我建议使用关联数组(即字典):
<?php
echo json_encode(Array("result" => $value1, "chck" => $value2));
?>
你用以下内容解析:
struct ServerResult: Decodable {
let result: [Conversation]
let chck: [String]
}
和
let serverResult = try JSONDecoder().decode(ServerResult.self, from: data!)
现在,鉴于你还没有分享细节,我假设:
$value1
是一个结构合理的Conversation
; Conversation
本身就是Decodable
;和$value2
是一个结构合理的String
。我还建议避免使用data!
,因为如果出现服务器错误,您的应用就会崩溃。我建议你优雅地检测错误,例如:
let task = URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data, error == nil else {
print(error ?? "Unknown error")
return
}
do {
let serverResult = try JSONDecoder().decode(ServerResult.self, from: data)
// do something
} catch let parseError {
print(parseError)
}
}
task.resume()