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

Posted

技术标签:

【中文标题】错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”【英文标题】:Error Code : Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." 【发布时间】:2018-05-16 05:57:33 【问题描述】:

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

Error Domain=NSCocoaErrorDomain Code=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);
                ];

【问题讨论】:

它清楚地表明您的 JSON 格式无效。 【参考方案1】:

它清楚地表明您发送了错误的 JSON 格式。意味着有两个 可能性。

要么你发送了错误的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查找参考

更新:

它工作正常。请看下面的截图。

请确保user_idproduct_id 的值不应为nil

【讨论】:

嗨 Hitesh,感谢您的及时反馈。我在应用您的代码后遇到此错误:- *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** +[NSJSONSerialization dataWithJSONObject:options:error:]: Invalid top-level type in JSON write” 很抱歉给您带来不便,但它可以根据要求正常工作且隐蔽。您也可以签入上面附加的屏幕截图【参考方案2】:

这个错误主要有两个原因。

    服务器无法解析来自您的请求的数据

    发送错误请求

首先尝试在 postman 上调用 webservice。如果您的 Web 服务调用成功并且您获得响应数据,则使用 json 验证器验证该 json 响应。 如果 json 响应有效,请检查您的请求。

大多数时候问题出在我们发送到服务器的请求上。

快乐编码。

【讨论】:

以上是关于错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”的主要内容,如果未能解决你的问题,请参考以下文章

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。”

Json 错误:错误域 = NSCocoaErrorDomain 代码 = 3840“无值”。 UserInfo=NSDebugDescription=无值。

PhotoPicker 发现错误:错误域 = PlugInKit 代码 = 13

iOS:- 错误:无法创建存储目录。错误域 = NSCocoaErrorDomain 代码 = 512

错误:错误域=NSURLErrorDomain 代码=-1001 “请求超时。”

错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。”