iOS JSON错误:NSDebugDescription =垃圾邮件结束

问题描述 投票:3回答:5

这是一个非常奇怪的错误,当从我的服务器(通过PHP生成)抓取JSON时,我在调用时遇到此错误:

json = [NSJSONSerialization JSONObjectWithData:kivaData
                                       options:kNilOptions
                                         error:&jsonError];

JSON错误:错误域= NSCocoaErrorDomain代码= 3840“操作无法完成。(可可错误3840。)”(垃圾结束。)UserInfo = 0x178467d00 {NSDebugDescription =垃圾结束。}

我的(NSData * kivaData)完全抓住了一切,但它无法解析JSON。

我在http://jsonlint.com/中运行了我的JSON代码,它每次出来都有效。

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

php ios json garbage
5个回答
0
投票

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


0
投票

通过在响应之前发送内容长度标头,我能够解决同样的问题(适用于wifi,但不适用于运营商网络):

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

0
投票

我最终不得不改变我的php文件,从回显json语法到简单输出json_encode。


0
投票

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

您可以维护字典以存储从服务器获取的响应。每项任务都会有独特的响应。因此,创建一个字典,其中“keys”为任务的“taskIdentifier”,“值”为“data”。

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

 NSString *taskID = [@(dataTask.taskIdentifier) stringValue];
[_task_data_dictionary setObject:data forKey:taskID];

这里_task_data_dictionary是字典。这样你可以摆脱上面的错误。

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

 NSData *data = [_task_data_dictionary objectForKey:taskNumber];

再次使用taskIdentifier。

希望这可以帮助 。


0
投票

使用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)
© www.soinside.com 2019 - 2024. All rights reserved.