Я почти ничего не знаю о JSON, и мне нужно отправить запрос на сервер и прочитать поступающие с него данные, используя только iPhone.
Я пытался использовать jason-framework
чтобы сделать это, но после прочтения документации я не смог понять, как построить объект и отправить его по запросу. Поэтому я решил адаптировать другой код, который я видел здесь, на SO.
Объект, который мне нужен, это:
{"code": xxx}
Здесь у меня проблема. Этот xxx является NSData, поэтому я подозреваю, что мне нужно преобразовать эти данные в строку, затем использовать эту строку для создания объекта и отправить его по запросу.
ответ сервера также является объектом JSON в форме
{"answer": "yyy"}
где yyy - это число от 10000 до 99999
это код, который у меня есть.
- (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[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
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];
}
весь этот код дает мне ошибки. Или ПЛОХОЙ URL или исключение Java.
Что не так с этим кодом?
Если вы, ребята, предпочитаете дать другое решение с использованием json-framework, расскажите, пожалуйста, как кодировать объект с использованием этой пары («код», «мои NSData здесь преобразованы в строку») ...
спасибо за любую помощь.