Je ne connais presque rien à JSON et j'ai besoin d'envoyer une requête à un serveur et de lire les données qui en proviennent, en utilisant uniquement l'iPhone. Pour cela, j'ai essayé d'utiliser le jason-framework , mais après avoir lu les documentations, je n'ai pas réussi à comprendre comment construire l'objet et l'envoyer à la demande. J'ai donc décidé d'adapter un autre code que j'ai vu ici sur SO.JSON IPHONE: Comment envoyer une requête JSON et extraire les données d'un serveur?
L'objet dont j'ai besoin est ceci:
{ "code": xxx}
Ici, j'ai un problème. Ce xxx est un NSData, donc je suppose que je dois convertir ces données en une chaîne, puis utiliser cette chaîne pour construire un objet et l'envoyer sur la requête.
la réponse du serveur est également un objet JSON, sous la forme
{ « réponse »: « yyy »} où yyy est un nombre compris entre 10000 et 99999
c'est le code que j'ai donc loin.
- (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];
}
tout ce code me donne des erreurs. Ou BAD URL ou exception java.
Quel est le problème avec ce code?
Si vous les gars préfèrent donner une autre solution en utilisant le cadre JSON-s'il vous plaît me dire comment coder l'objet en utilisant cette paire (« code », « mon NSData converti ici pour string ») ...
merci pour toute aide.
Merci !!!!!! c'est tout!La documentation de la bibliothèque ASIHTTPRequest est assez incomplète et superficielle (ce n'est pas votre faute), mais j'ai réussi à la faire fonctionner en utilisant vos instructions. Parfait! Vous êtes un homme! – SpaceDog
Heureux que ça a marché pour vous. N'abandonnez pas sur ASIHTTPRequest. C'est assez simple une fois que vous avez compris. La seule chose à faire est de ne pas oublier de fournir les méthodes setDidFinishSelector/setDidFailSelector et de définir le délégué afin de recevoir une notification lorsque la mise en réseau échoue. Beaucoup trop de zones mortes de cellules là-bas. – Ramin