No sé casi nada sobre JSON y necesito enviar una solicitud a un servidor y leer los datos que provienen de ella, solo con el iPhone.JSON IPHONE: ¿Cómo enviar una solicitud JSON y extraer los datos de un servidor?
He intentado usar el jason-framework para hacer eso, pero después de leer la documentación no pude averiguar cómo construir el objeto y enviarlo a la solicitud. Así que decidí adaptar otro código que vi aquí en SO.
El objeto que necesito es la siguiente:
{ "código": xxx}
Aquí tengo un problema. Este xxx es un NSData, así que sospecho que tengo que convertir estos datos a una cadena, luego uso esta cadena para construir un objeto y enviarlo a la solicitud.
la respuesta del servidor es también un objeto JSON, en forma
{ "respuesta": "yyy"} donde yyy es un número entre 10000 y 99999
este es el código que tengo hasta lejos.
- (NSString *)checkData:(NSData) theData {
NSString *jsonObjectString = [self encode:(uint8_t *)theData length:theData.length];
NSString *completeString = [NSString stringWithFormat:@"http://www.server.com/check?myData=%@", jsonObjectString];
NSURL *urlForValidation = [NSURL URLWithString:completeString];
NSMutableURLRequest *validationRequest = [[NSMutableURLRequest alloc] initWithURL:urlForValidation];
[validationRequest setHTTPMethod:@"POST"];
NSData *responseData = [NSURLConnection sendSynchronousRequest:validationRequest returningResponse:nil error:nil];
[validationRequest release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding: NSUTF8StringEncoding];
NSInteger response = [responseString integerValue];
NSLog(@"%@", responseString);
[responseString release];
return responseString;
}
- (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=";
NSMutableData *data = [NSMutableData dataWithLength:((length + 2)/3) * 4];
uint8_t *output = (uint8_t *)data.mutableBytes;
for (NSInteger i = 0; i < length; i += 3) {
NSInteger value = 0;
for (NSInteger j = i; j < (i + 3); j++) {
value <<= 8;
if (j < length) {
value |= (0xFF & input[j]);
}
}
NSInteger index = (i/3) * 4;
output[index + 0] = table[(value >> 18) & 0x3F];
output[index + 1] = table[(value >> 12) & 0x3F];
output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
}
ret
urn [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
todo lo que me da este código es un error. O MALA URL o excepción java.
¿Qué hay de malo en este código?
Si ustedes prefieren dar otra solución utilizando el JSON-marco por favor dígame cómo codificar el objeto con ese par ("código", "mi NSData aquí convertida en cadena") ...
gracias para cualquier ayuda.
Gracias !!!!!! ¡Eso es!La documentación de la biblioteca ASIHTTPRequest es bastante incompleta y superficial (no es tu culpa), pero logré que funcionara siguiendo tus instrucciones. ¡Perfecto! ¡Eres D hombre! – SpaceDog
Me alegro de que funcionó para usted. No te rindas en ASIHTTPRequest. Es bastante sencillo una vez que te acostumbras. Lo único es que no se olvide de proporcionar los métodos setDidFinishSelector/setDidFailSelector y configurar el delegado para que reciba una notificación cuando falle la red. Demasiadas zonas muertas de células por ahí. – Ramin