我正在尝试将JSON格式的数据发送到REST API。发送参数时,Web服务不会返回任何数据,而是会出现以下错误:解析JSON时出错:Error Domain = NSCocoaErrorDomain Code = 3840"操作无法完成。 (可可误差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"]];
}
}
有什么建议吗?
答案 0 :(得分:0)
您的错误“JSON文本没有以数组或对象开头,而选项允许未设置片段”可能意味着两件事:
修复:获取服务器代码并确保它返回有效的JSON对象
修复:如果您正在使用AFNetworking,请在AFHTTPClient的子类中将NSJSONReadingAllowFragments传递给[NSJSONSerialization JSONObjectWithData:options:error:](为此答案喊出Cocoa error 3840 using JSON (iOS))