Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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
Php iOS JSON错误:NSDebugDescription=末尾的垃圾_Php_Ios_Json_Garbage - Fatal编程技术网

Php iOS JSON错误:NSDebugDescription=末尾的垃圾

Php iOS JSON错误:NSDebugDescription=末尾的垃圾,php,ios,json,garbage,Php,Ios,Json,Garbage,这是一个非常奇怪的错误,当从我的服务器(通过PHP生成)获取JSON时,调用时会出现以下错误: json = [NSJSONSerialization JSONObjectWithData:kivaData options:kNilOptions error:&jsonError]; JSON错误:Error Domain=NS

这是一个非常奇怪的错误,当从我的服务器(通过PHP生成)获取JSON时,调用时会出现以下错误:

json = [NSJSONSerialization JSONObjectWithData:kivaData
                                       options:kNilOptions
                                         error:&jsonError];
JSON错误:Error Domain=NSCOCAERRORDOMAIN Code=3840“操作无法完成。(Cocoa错误3840.)(结尾处为垃圾。)UserInfo=0x178467d00{NSDebugDescription=结尾处为垃圾。}

My(NSData*kivaData)完美地抓住了一切,但它无法解析JSON

我已经运行了我的JSON代码,每次都有效


这真的很奇怪,因为当我连接到Wifi时,它可以解析JSON,但当我尝试通过手机进行解析时,它就不起作用了。在某些人的手机上,它确实可以在手机上工作,但每次都是这样。

编码非常重要。如果json有效,问题可能是json数据中有特殊字符,json序列化程序无法正确解析这些字符。当您发送数据时,请确保在发送内容时使用了正确的url编码,以便客户端能够正确解析数据。使用utf-8 always或base64。

我能够通过在响应之前发送内容长度头来解决相同的问题(在wifi上工作,但在运营商网络上不工作):

header("Content-length: ".strlen($response));
echo $response;
exit;

最后,我不得不将我的php文件从回显json语法改为简单地用json_encode输出。

JsonData通常以字典格式存储。由于json无法解析连续数据[无法分离响应],因此抛出此错误

您可以维护一个字典来存储从服务器获得的响应。 每个任务都有一个唯一的响应。因此,创建一个字典,用“键”作为任务的“任务标识符”,用“值”作为“数据”

例如: 在didReceiveData或任何其他等效方法中[从服务器获取响应的地方]使用taskIdentifier作为键将响应存储在字典中

 NSString *taskID = [@(dataTask.taskIdentifier) stringValue];
[_task_data_dictionary setObject:data forKey:taskID];
这里的任务数据字典就是字典。这样你就可以摆脱上面的错误

在此之后,您可以使用此代码使用相同的字典获取数据

 NSData *data = [_task_data_dictionary objectForKey:taskNumber];
再次使用taskIdentifier


希望这有帮助。

使用swift 4,首先使用print检查JSON数据:

print (String(data:data!, encoding: .utf8)!)
检查空格或不需要的字符,然后删除它们:

var string = String(data: data!, encoding: .utf8)
string = string?.replacingOccurrences(of: "/r/n", with: "")
之后,将字符串重新分配给数据变量:

let data1 = string!.data(using: .utf8)

你有没有找到解决办法?我也看到了同样的事情。如果有帮助的话,我的JSON响应是110k左右。