objective-c ios json cocoa-touch

objective c - Error de cacao 3840 con JSON(iOS)



objective-c cocoa-touch (3)

A menos que pase la opción NSJSONReadingAllowFragments a [NSJSONSerialization JSONObjectWithData:options:error:] la respuesta del servidor debe ser JSON válida con un contenedor de nivel superior que es una matriz o un diccionario.

por ejemplo:

{ "response" : "Success" }

PD Si desea un diccionario mutable, también debe incluir NSJSONReadingMutableContainers en sus opciones.

Estoy tratando de enviar datos a un servidor y recibir la respuesta en formato JSON. El problema es que el servidor debe devolver "éxito" o "error" pero devuelve "(nulo)".

Aquí está el error devuelto:

Error Domain = NSCocoaErrorDomain Code = 3840 "No se pudo completar la operación. (Cocoa error 3840.)" (El texto JSON no comenzó con la matriz u objeto y la opción para permitir que no se establezcan los fragmentos). UserInfo = XXXXXXXXX {NSDebugDescription = JSON text no comenzó con matriz u objeto ni opción para permitir que no se establezcan fragmentos.}

¿Es posible que el error esté en el script del servidor?

Aquí está mi función para enviar los datos y recibir la respuesta:

- (void) putData:(NSString *)parameter valor:(NSString *)valor { NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, valor]; NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"PUT"]; [request setHTTPBody:data]; NSURLResponse *response; NSError *error; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; NSLog(@"responseData: %@ error: %@", json, error); }


Es posible que, la respuesta de su servidor no contenga JSON válido.

Técnicamente, el objeto JSON debe comenzar con una "matriz" o un "objeto (diccionario)".

Entonces, lo que sea que devuelva tu servidor no lo es.

Y puede forzar que el JSON se consuma independientemente utilizando la opción NSJSONReadingAllowFragments.

mediante el uso ,

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];


Puede obtener este problema si está conectado a VPN en su dispositivo iOS.