Json 获取数组而不是字典
我没有使用第三方文件调用API,代码如下:Json 获取数组而不是字典,json,swift,swift3,Json,Swift,Swift3,我没有使用第三方文件调用API,代码如下: func CallWebService(_ methodType: NSString, methodName: NSString, inputDict: NSDictionary, completion: @escaping (_ result: [String:AnyObject]) -> Void, failure:(_ failurMSG: NSString)->()) { do { let data: Data = try
func CallWebService(_ methodType: NSString, methodName: NSString, inputDict: NSDictionary, completion: @escaping (_ result: [String:AnyObject]) -> Void, failure:(_ failurMSG: NSString)->())
{
do {
let data: Data = try JSONSerialization.data(withJSONObject: inputDict, options: [])
//create request
let tmpString: String = "\(kBaseUrl)\(methodName)"
let urlString :String = tmpString.addingPercentEncoding( withAllowedCharacters: CharacterSet.urlQueryAllowed)!
let urlRequest = NSMutableURLRequest(url: URL(string: urlString)!)
urlRequest.httpMethod = methodType as String
urlRequest.httpBody = data
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
let task : URLSessionDataTask! = URLSession.shared.dataTask(with: urlRequest as URLRequest, completionHandler: {
(data, response, error) in
if let _ = error
{
DispatchQueue.main.async(execute: {
})
}else{
do {
let dict = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:AnyObject]
completion(dict)
}catch{
}
}
})
task.resume()
} catch {
DispatchQueue.main.async(execute: {
})
failure("Something goes wrong please try again.")
}
}
当我点击API时,我得到了以下响应:
["status": success, "category": {
"file_image" = "http://abcds.com/cphp/26/uploads/pdf1.png";
"file_name" = "1 \U0645\U0644\U0641 \U0627\U062e\U062a\U0628\U0627\U0631";
"file_path" = "http://hghg/images/2311201663231Michael20plat20du20jour20correctd.pdf";
id = 2;
"sub_name" = "P12 \U0641\U0631\U0639\U064a\U0629";
}]
这不是正确的格式,我遗漏了什么
我需要输出为:
{"status": success, "category": [
"file_image" = "http://abcds.com/cphp/26/uploads/pdf1.png";
"file_name" = "1 \U0645\U0644\U0641 \U0627\U062e\U062a\U0628\U0627\U0631";
"file_path" = "http://hghg/images/2311201663231Michael20plat20du20jour20correctd.pdf";
id = 2;
"sub_name" = "P12 \U0641\U0631\U0639\U064a\U0629";
]
}
在我看来,你好像得到了一本字典 编辑: 事实上,您的代码强制将JSON数据转换为type
[String:AnyObject]
这一事实证明了结果是一个字典。如果没有,强制铸造生产线将崩溃:
let dict = try JSONSerialization.jsonObject(with: data!,
options: .allowFragments) as! [String:AnyObject]
(该行的as![String:AnyObject]
部分表示“我确信该值可以转换为类型[String:AnyObject]
。如果不能转换,请使我的程序崩溃。)
尝试将此添加到代码中:
print("dict type =" + String(describing:type(of:dict)))
我敢打赌你一定会成功
dict type=Dictionary
我认为这是服务器端的问题。告诉您的PHP人员更改此响应您的断言是错误的,并且您的对象是正确的。这是一个字典。尝试执行
dict[“status”]
您将看到。一旦您将AnyObject部分转换为实际有用的类型,您将看到该对象的其余部分也是正确的。在我看来,您正在获得一本词典。条目“状态“:success
看起来像一个键/值对。您如何显示数据?根据显示方式的不同,您将获得不同的格式,并且转换后的格式将与JSON不同。PHP人员以正确的方式发送。你能告诉我我的代码有没有错误吗?实际输出和预期输出都是无效的。好吧,OP正在做as![String:AnyObject]
所以我们确实确信他们拥有的是一本字典,否则他们会抱怨臭名昭著的致命错误……;)是的,但显示对象的类型是一个有用的学习工具。@duncac如果我在写补全(String(description:type(of:dict)),那么它的给定错误就像无法将String的值转换为预期的参数类型“[String AnyObject]”@duncac我应该在补全中写什么才能得到所需的操作