2011-10-31 96 views
-1

我創建了一個簡單的PHP文件輸出JSON字符串:JSON來的NSDictionary從HTTP POST請求

<? 
$test = $_POST["hashcode"]; 
if ($ttest != "") 
{ 
    $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'couponcode' => $test); 
    echo json_encode($arr); 
} 
?> 

我想使用Objective-C語言來檢索該JSON並將其解析爲一個的NSDictionary。我目前使用JSON框架,但它不適合我。

NSHTTPURLResponse * response; 
NSError * error; 
NSString *post = @"hashcode=asdf1234fdsa"; 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:@"www.ski-inndronten.nl/json.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

NSData *testJSON = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *jsonString = [testJSON JSONRepresentation]; 
NSLog(@"String = %@",jsonString); 
NSDictionary *testDict = [jsonString JSONValue]; 
NSLog(@"testDict = %@",testDict); 

我希望你能幫助我,因爲我不知道我做錯了什麼。 (我輸出NULL對象)

+0

只要放一些斷點即可。響應(testJSON數據)在請求後沒有任何值。 – Ilanchezhian

回答

1

確定有兩個誤區:

第一,你忘了添加的「http://」在你的URL字符串前面。如果您不這樣做,請求將失敗並返回數據爲零。

第二,你發送不正確的應用程序/ json內容類型,如果你這樣做,PHP將返回一個無效的答案。只需刪除此設置並返回的代碼將是正確的。

順便說一句,你可以通過登錄返回的數據如下方便您調試:


NSData *testJSON = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSLog(@"%@",[[NSString alloc] initWithData:testJSON encoding:NSUTF8StringEncoding]); 

如果你做這兩個更正,答案將正確地返回。

+0

我在這個網站上發佈了代碼,並將變量$ test寫爲$ ttest。如果json.php沒有收到帖子請求,它不會輸出任何內容。我更新了te代碼,它總是輸出一些東西。不幸的是,NSLog仍然輸出NULL表示。 –

+0

看到我更正的答案:糾正後工作發現和代碼測試(我沒有測試您的JSON轉換,因爲我沒有使用您的代碼中的JSON類,所以我限制了我的支票控制POST返回的字符串) – viggio24

+0

Thx,這爲我工作! –