错误代码:错误域= NSCocoaErrorDomain代码= 3840“JSON文本没有以数组或对象开头,并且选项允许未设置片段。”

时间:2018-05-16 05:57:33

标签: ios json api afnetworking put

当我使用afNetworking PUT方法时,我遇到了这个错误。请帮忙。

  

错误域= NSCocoaErrorDomain代码= 3840“JSON文本未启动   使用数组或对象以及允许未设置片段的选项。“   UserInfo = {NSDebugDescription = JSON文本不是以数组或   允许片段未设置的对象和选项。}

这是我的代码: -

 NSInteger intUserID = [[prefs stringForKey:@"user_id"] integerValue];
                NSInteger intProdID = [_strProdID integerValue];

                AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
                AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
                [serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                [serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
                manager.requestSerializer = serializer;

                NSDictionary *params = @{@"In d":@(1),@"user_id":@(intUserID),@"product_id":@(intProdID)};

                [manager PUT:@"http://api.XXX.com/api/product/wishlist_add" parameters:params success:^(NSURLSessionTask *task, id responseObject) {


                }failure:^(NSURLSessionTask *operation, NSError *error) {
                    NSLog(@"Error Code : %@", error);
                }];

2 个答案:

答案 0 :(得分:1)

  

它清楚地说你发送了错误的json格式。意味着有两个   possiblty。

  • 要么你发错了json。

  • 或者您的服务器无法解析您的请求中的数据。

我已经面临同样的问题了。请使用下面的代码,我相信它会对你有用。

            NSInteger intUserID = [[prefs stringForKey:@"user_id"] integerValue];
            NSInteger intProdID = [_strProdID integerValue];
            NSDictionary *params = @{@"In d":@(1),@"user_id":@(intUserID),@"product_id":@(intProdID)};

            NSError *error; 
            NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params 
                                                               options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                                 error:&error];

            if (! jsonData) {
                NSLog(@"Got an error: %@", error);
            } else {
                NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

            AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
            AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
            [serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
            manager.requestSerializer = serializer;

            [manager PUT:@"http://api.XXX.com/api/product/wishlist_add" parameters:jsonString success:^(NSURLSessionTask *task, id responseObject) {
                    }failure:^(NSURLSessionTask *operation, NSError *error) {
                        NSLog(@"Error Code : %@", error);
                    }];
            }

查找here

的参考资料

<强>更新

工作正常。请参阅下面附带的屏幕截图。

enter image description here

请确保user_idproduct_id值不应为nil

答案 1 :(得分:0)

出现此错误的原因主要有两个。

  1. 服务器无法解析您的请求中的数据

  2. 发送错误的请求

首先尝试通过邮递员致电网络服务。如果您的网络服务调用成功,并且您获得了响应数据,则使用json验证程序验证json响应。 如果json响应有效,请检查您的请求。

大多数时候,问题在于我们发送给服务端的请求。

快乐编码。