JSON 文本没有以数组开头 AFNetworking 错误

Posted

技术标签:

【中文标题】JSON 文本没有以数组开头 AFNetworking 错误【英文标题】:JSON text did not start with array Error with AFNetworking 【发布时间】:2014-08-01 05:07:27 【问题描述】:

我正在使用下面的代码来执行 GET 请求。以相反的方式将参数发送到服务器并将数据存储在服务器中。但我得到了错误 * JSON 文本不是以数组开头 *

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        NSDictionary *params = @@"emails": emailid,
                                 @"password": paswrd,
                                 @"gender": gende,
                                 @"firstname":name1,
                                 @"lastname":firstname1,
                                 @"dateofBirth":dob1,
                                 @"Country":count
                                 ;

        [manager GET:@"http://37.187.152.236:91/EmployeeSvc.svc/AddEmployee?"
          parameters:params
             success:^(AFHTTPRequestOperation *operation, id responseObject) 
                 NSLog(@"JSON: %@", responseObject);
              failure:^(AFHTTPRequestOperation *operation, NSError *error) 
                 NSLog(@"Error: %@", error);
             ];

【问题讨论】:

您确定发送带有此类参数的GET 请求吗?响应必须是有效的 JSON,在服务器端似乎有些麻烦。 呃,你能发布 JSON 吗?谢谢。 【参考方案1】:
-(void) testHTTPS 
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
    [securityPolicy setAllowInvalidCertificates:YES];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager setSecurityPolicy:securityPolicy];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager GET:[NSString stringWithFormat:@"%@", HOST] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"%@", string);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);
    ];

【讨论】:

【参考方案2】:

你可以检查你的服务内容类型,如果是文本/html,你需要这样的代码:

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

【讨论】:

【参考方案3】:

这个问题可能是由于错误的 JSON 字符串造成的。错误的 JSON 字符串是指您的 JSON 响应可能不是以预期的字符开头,即 '['''。起始字符必须始终是上述两个字符中的任何一个。

您的 JSON 响应也有可能嵌入到某种 XML 字符串中。这发生在我身上,对我来说,这只是我解释的糟糕的 JSON 响应,我通过正确的解析解决了它。

检查此图像。这就是糟糕的 JSON 的样子。

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">
["Title":"DemoTitle","CreationDate":"06/06/2014","Description":"DemoDescription"]
</string>

如您所见,JSON 嵌入在 XML 字符串中。**强文本**另外,请检查您在此站点上的 JSON 响应:http://jsonlint.com/

这将显示您收到的 JSON 是否可用于解析。

希望这会有所帮助。

【讨论】:

【参考方案4】:

这是服务器端错误,当您的服务器未响应 JSON 响应或响应 不是有效的 JSON,因为当 AF 网络库无法解析 JSON 响应时会出现此错误。 请与您的服务器端检查响应

【讨论】:

数据在服务器中正确存储..但意味着同时出现此错误 不是存储数据的问题。当他们在 API 响应中返回数据时会出现此问题。

以上是关于JSON 文本没有以数组开头 AFNetworking 错误的主要内容,如果未能解决你的问题,请参考以下文章

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

NSDebugDescription = "JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。";

(Cocoa 错误 3840。)”(JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。)

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

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”