Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift2 如何使用NSURL会话对需要特殊字符的服务器进行api调用?_Swift2 - Fatal编程技术网

Swift2 如何使用NSURL会话对需要特殊字符的服务器进行api调用?

Swift2 如何使用NSURL会话对需要特殊字符的服务器进行api调用?,swift2,Swift2,我正在用Swift2.0和XCode 7.2构建一个iOS应用程序 我正在尝试对以下对象进行api调用: htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={“地区”:{“$eq”:“迈阿密”} 当我尝试使用此字符串(端点)创建URL时: let url=NSURL(字符串:端点),则返回一个nil 因此,我尝试在创建URL之前对字符串进行编码: let encodedString = endPoint.stringByAddingPerc

我正在用Swift2.0和XCode 7.2构建一个iOS应用程序 我正在尝试对以下对象进行api调用:

htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={“地区”:{“$eq”:“迈阿密”}

当我尝试使用此字符串(端点)创建URL时:

let url=NSURL(字符串:端点)
,则返回一个
nil

因此,我尝试在创建URL之前对字符串进行编码:

let encodedString = endPoint.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
现在编码字符串:

"htttp://xyz.com/t/restaurants-us?KEY=someKey&filters=%7B%2522locality%2522:%7B%2522$eq%2522:%2522miami%2522%7D%7D"
但是现在,当我创建一个
NSURL
会话并发送请求时,我从服务器收到了一个意外的响应:

Reply from server:
{
    "error_type" = InvalidJsonArgument;
    message = "Parameter 'filters' contains an error in its JSON syntax.  For documentation, please see: http://developer.factual.com.";
    status = error;
    version = 3;
}
因此,如果我不编码字符串,我将无法创建
NSURL
。 但是如果我编码并发送请求,服务器将无法处理该请求。
任何人都可以提出解决方法。

当您声明
端点时,您已经对一些字符(引号)进行了百分比编码。当您要求iOS对其进行百分比编码时,它将百分比编码为百分比编码。解码
encodedString
会导致:

htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={%22locality%22:{%22$eq%22:%22miami%22}}
相反,您应该从
端点中的实际引号开始:

let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={\"locality\":{\"$eq\":\"miami\"}}"

是的,当我开始引用时,它起了作用。非常感谢。
let endPoint:String = "htttp://xyz.com/t/restaurants-us?KEY=someKey&filters={\"locality\":{\"$eq\":\"miami\"}}"