我对JSON几乎一无所知,我只需要向服务器发送请求并从中读取数据。JSON IPHONE:如何发送JSON请求并从服务器中提取数据?
我试图使用jason-framework 来做到这一点,但在阅读文档后,我无法弄清楚如何构建对象并在请求中发送它。所以我决定修改我在这里看到的另一个代码。
我所需要的对象是这样的:
{ “代码”:XXX}
在这里,我有一个问题。这个xxx是一个NSData,所以我怀疑我必须将这些数据转换为一个字符串,然后使用这个字符串来构建一个对象并根据请求发送这个数据。
服务器响应也是JSON对象,在形式
{“答案”:“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[] = "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];
}
所有此代码给我的错误。或BAD URL或Java异常。
这段代码有什么问题?
如果你们喜欢用JSON框架请告诉我如何使用对(“码”,“我的NSData这里转换成字符串”)来编码对象给另一个解决方案...
感谢寻求帮助。
感谢!!!!!!而已!ASIHTTPRequest库文档相当不完整和肤浅(不是你的错),但是我设法使用你的指令使它工作。完善!你是D人! – SpaceDog 2009-10-05 18:13:50
很高兴为你效劳。不要放弃ASIHTTPRequest。一旦你掌握了它,它是非常简单的。唯一的问题是,不要忘记提供setDidFinishSelector/setDidFailSelector方法并设置委托,以便在联网失败时收到通知。太多的细胞死亡区在那里。 – Ramin 2009-10-05 21:12:40