1

我正在尝试将 JSON 格式的数据发送到 REST api。发送参数时,Web 服务不返回任何数据,而是给出以下错误:解析 JSON 时出错:Error Domain=NSCocoaErrorDomain Code=3840 “无法完成操作。(Cocoa 错误 3840。)”(JSON 文本没有不以数组或对象和允许未设置片段的选项开头。)

这是因为 Web 服务无法读取该参数。但是,如果我将此参数直接添加到 URL,则会返回正确的结果例如:http://localhost:8080/de.vogella.jersey.final/rest/notes/63056

以下是发送参数的代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost:8080/de.vogella.jersey.final/rest/notes/"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

    NSString *postString = @"{\"notes\":\"63056\"}";
    NSLog(@"Request: %@", postString);
   // NSString *postString = @"";


    [request setValue:[NSString stringWithFormat:@"%d",[postString length]] forHTTPHeaderField:@"Content-length"];
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];




    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
    NSLog(@"Return Data%@",returnData);


    //Getting the task types from the JSON array received  
    NSMutableArray *jsonArray =[NSJSONSerialization JSONObjectWithData:returnData options:kNilOptions error:&error];
    NSLog(@"jsonArray is %@",jsonArray);
    taskTypes =[[NSMutableArray alloc]init ];
    if (!jsonArray) {
        NSLog(@"Error parsing JSON: %@",error);
    } else {
        for(NSDictionary *taskType in jsonArray) {


            [taskTypes addObject:[taskType objectForKey:@"TaskName"]];
        }

    }

有什么建议么?

4

1 回答 1

1

您的错误“JSON 文本没有以数组或对象开头,并且允许未设置片段的选项”可能意味着两件事:

  1. 您指定您希望响应对象采用 JSON 格式,但它不是(例如,如果您使用 AFJSONRequestOperation 并且服务器返回 JSON 以外的其他内容,则会发生这种情况)

修复:获取服务器代码并确保它返回有效的 JSON 对象

  1. 您尚未指定可以接收 JSON 以外的其他内容

修复:如果您使用的是 AFNetworking,请将 NSJSONReadingAllowFragments 传递给您的 AFHTTPClient 子类的 [NSJSONSerialization JSONObjectWithData:options:error:] (使用 JSON (iOS) 向 Cocoa 错误 3840大喊此答案)。

于 2013-08-12T15:21:32.660 回答