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。
由于
答案 0 :(得分:1)
你说服务器给你这个:
JSON: "{\"value\":[{\"Id\":\" }}
如果我删除NSLog命令添加的反斜杠,那么您收到的实际JSON是
{"value":[{"Id":" }}
这不是有效的JSON。这里的所有都是它的;服务器向您发送了垃圾数据,并且无法从中获取任何信息。联系创建服务器软件的人员并要求他们解决问题。
而且你真的需要区分对象真正包含的内容和NSLog打印的内容。 NSLog通过将每个字节显示为两个十六进制数字来打印NSData对象的内容。
答案 1 :(得分:0)
尝试其中一个(数组或字典)而不将其转换为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);
});
我还没试过,请粘贴结果?
答案 2 :(得分:0)
根据您的NSString
回复,它以{
开头,以}
结尾,这意味着它是NSDictionary
。
更改:
NSMutableArray *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
到:
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&error];