1

JSON形式のデータをRESTAPIに送信しようとしています。パラメータを送信すると、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 テキストが配列またはオブジェクトで開始されておらず、フラグメントを許可するオプションが設定されていません」というエラーは、次の 2 つのことを意味する可能性があります。

  1. 応答オブジェクトが JSON 形式であることを期待していることを指定していますが、そうではありません (たとえば、AFJSONRequestOperation を使用していて、サーバーが JSON 以外のものを返す場合に発生します)。

修正: サーバー コードを取得し、有効な JSON オブジェクトが返されることを確認します。

  1. JSON 以外のものを受け取っても問題ないことを指定していません

修正: AFNetworking を使用している場合は、NSJSONReadingAllowFragments を AFHTTPClient のサブクラスの [NSJSONSerialization JSONObjectWithData:options:error:] に渡します (この回答については、JSON (iOS) を使用して Cocoa エラー 3840に叫びます)。

于 2013-08-12T15:21:32.660 に答える