iOS Jsonp数据格式解析

Jsonp 数据格式,是前端js调用的函数片段,用于跨域。网上找了很多,似乎都没有iOS端的使用方法。

下面简单的说明一下iOS获取Jsonp 数据的注意事项,以及它的请求解析方法。

获取数据方法一:AFN请求,记得响应序列化responseSerializer 设置为 AFHTTPRequestSerializer,否则返回格式非json,会导致请求失败。在此,就不放代码了。

获取数据方法二:NSURLSession

  NSURLSession *session = [NSURLSession sharedSession];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30];
    NSURLSessionDataTask *task =  [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (data && (error == nil)) {
                // 网络访问成功
            } else {
                // 网络访问失败
                NSLog(@"error=%@",error);
              
            }
    }];
    [task resume];

如何解析呢?我给简单的封装了一个方法。preMethod是jsonp 外面的字符串。比如:callback({字典json串});,那么preMethod =callback 即可。如果使用过程中有什么疑问或者建议,可以在下方留言。

-(NSDictionary *)jsonpDataToDic:(NSData *)data preMethod:(NSString *)preMethod{
    NSString *jsonp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSInteger lenght = jsonp.length;
    NSString *startJsonp = preMethod;
    NSInteger startLenght = startJsonp.length+1;//1是左边括号
    if (lenght>startLenght+1) {
        NSString *json =[jsonp substringWithRange:NSMakeRange(startLenght,lenght-startLenght-1)];
        NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                            options:NSJSONReadingMutableContainers
                                                              error:&err];
        return dic;
    }
    return nil;
    
}

猜你喜欢

转载自blog.csdn.net/zhang_pengfei/article/details/88531036
今日推荐