我對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