空JSON响应

时间:2015-04-19 22:17:42

标签: ios json nsdata nsjsonserialization

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\":\" }}

但    NSData69746963 735c222c 5c224973 41767469 76655c22 3a5c2231 5c222cjsonDict返回(null)

我很困惑可能会发生什么。 有人可以帮我解决一下。

我正在尝试获取JSON数据,但它返回null。

由于

3 个答案:

答案 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];