空 JSON 响应
Posted
技术标签:
【中文标题】空 JSON 响应【英文标题】:Null JSON response 【发布时间】:2015-04-19 22:17:42 【问题描述】:NSString *connection = @"http:"(link);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^
NSError *error = nil;
NSURL *url = [NSURL URLWithString:connection];
NSString *json = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
NSLog(@"\nJSON: %@ \n Error: %@", json, error);
if(!error)
NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@",jsonData);
NSMutableArray *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
NSLog(@"JSON: %@", jsonDict);
);
以上代码返回:
JSON: "\"value\":[\"Id\":\"
但是
NSData
是 69746963 735c222c 5c224973 41767469 76655c22 3a5c2231 5c222c
jsonDict
返回 (null)
。
我对可能发生的事情感到困惑。 谁能帮我弄清楚。
我正在尝试获取 JSON 数据,但它返回 null。
谢谢
【问题讨论】:
NSData 的日志没问题。那是字节,而不是指针。记录调用 JSONObjectWithData 的错误。 看起来返回的 json 无效,因此 NSJSONSerialization 失败。错误为零吗? Erro : Error Domain=NSCocoaErrorDomain Code=3840 “操作无法完成。(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项.) UserInfo=0x7f8cbacbc2e0 NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。 如何解决此错误?是否只能通过 Web 服务本身实现? -> JamesSugrue 一切都很好,你只是在打印字节。 修复服务器,使其返回有效的 JSON。 【参考方案1】:你说服务器给你这个:
JSON: "\"value\":[\"Id\":\"
如果我删除 NSLog 命令添加的反斜杠,您收到的实际 JSON 是
"value":["Id":"
这不是有效的 JSON。这里的所有都是它的;服务器向您发送了垃圾数据,并且无法从中获取任何信息。联系创建服务器软件的人员并要求他们解决问题。
你真的,真的需要区分对象真正包含的内容和 NSLog 打印的内容。 NSLog 通过将每个字节显示为两个十六进制数字来打印 NSData 对象的内容。
【讨论】:
由于某些原因,当我从 Web 服务复制数据本身并在 JSONLint (jsonValidator) 中运行时,它说数据是 JSON 有效的。但是当我复制粘贴网站链接时,它说数据不是 JSON 有效的。我想知道这可能是什么问题。【参考方案2】:尝试其中一个(数组或字典)而不将其转换为 JSON,这取决于您想要什么:
NSString *connection = @"http://(link)";
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^
NSDictionary *jsonDict = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:connection]];
NSArray *jsonArray = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:connection]];
NSLog(@"DICT: %@ ARRAY: %@", jsonDict, jsonArray);
);
我没试过,请粘贴结果?
【讨论】:
情感它仍然返回 null DICT: (null) ARRAY: (null)【参考方案3】:从您的NSString
响应来看,它以 开头并以
结尾,这意味着它是
NSDictionary
。
改变:
NSMutableArray *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
到:
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&error];
【讨论】:
由于某些原因,它以“”开头并以“”标记结尾。所以,我认为这可能是我们没有从 Web 服务获取任何类型数据的原因。 JSON: "\"value\":[\"Id\":\" 您的内容类型设置为纯文本还是什么?header("Content-Type:text/plain");
尝试使用上述代码在 php 顶部的 header('Content-Type: application/json');
和 header('Content-Type: text/plain');
之间进行更改。
我尝试使用 www.hurl.it。我仍然返回相同的值。我认为问题是“在值字典开始之前。我想我必须与 Web 服务器处理程序交谈,或者必须想办法摆脱”当我得到 JSON 数据时
是的,它的引用和添加斜杠..?尝试询问超级用户以上是关于空 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章