2012-11-07 57 views
1

我試圖發送一個json數組到php post請求。是否有可能通過郵件發送json數組?

$myarray[] = 500; 
$myarray[] = "hello world"; 

哪能$ myarray的JSON數據發送到一個PHP POST請求?

這裏是我的嘗試:

<form name="input" action="post.php"> 
<input type="hidden" name="json" value="[500,'hello world']" /> 
<input type="submit" value="Submit"> 
</form> 

林測試API,被告知只需要JSON數據...但我似乎無法得到它的工作。我的猜測是我發送json數據錯誤。有什麼想法嗎?

+3

JSON對象是文本。是的,你可以通過'post'發送文字。 – 2012-11-07 00:36:47

+2

http://php.net/manual/en/function.json-decode.php – sachleen

+1

@JackManey - [呃,實際上](http://tirania.org/blog/archive/2011/Feb-17.html )沒有像JSON對象那樣的東西。所有[是JSON字符串](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。 –

回答

3

您遇到的問題是這個字符串是不妥當的JSON:[500,'hello world']

這將是正確的JSON [500,"hello world"]。 JSON在格式上非常嚴格,並且要求所有字符串值都用雙引號括起來,而且不要使用單引號。

做,以避免問題的正確的事情,會使用PHP函數json_encode()json_decode()

例如,

<?php 
    $myarray[] = 500; 
    $myarray[] = "hello world"; 
    $myjson = json_encode($myarray); 
?> 
<form name="input" action="post.php"> 
    <input type="hidden" name="json" value="<?php echo $myjson ?>" /> 
    <input type="submit" value="Submit"> 
</form> 

和你會讀它,像這樣的post.php中,

<?php 
    $posted_data = array(); 
    if (!empty($_POST['json'])) { 
     $posted_data = json_decode($_POST['json'], true); 
    } 
    print_r($posted_data); 
?> 

true標誌json_decode()告訴你想要的功能作爲關聯ARR唉,而不是一個PHP對象,這是它的默認行爲。

print_r()功能將輸出轉換後的JSON陣列的PHP的結構:

Array(
    [0] => 500 
    [1] => hello world 
) 
+3

好的。但是,您還需要使用單引號,然後用'value ='。'''屬性,或者更好地應用'htmlspecialchars()',所以JSON的雙引號不會破壞HTML語法。 – mario

+0

哎呀,是的,有點快,很好抓住你自己。忘了輸入標籤上的引號lol。如果你想避免輸入特殊字符並避免輸入單引號,你可以'base64_encode'這個json,然後在另一端base64_decode以避免任何複雜性。類似於Facebook如何在Facebook應用程序的加載中發佈json簽名請求。 – Sheac

1

API是您的第三方嗎?

如果是你,消耗你的形式發送的數據應該是因爲這對你的API一樣簡單:

<?php 
    $data = json_decode($_REQUEST['json']); 

    echo $data[0]; // Should output 500 
    echo $data[1]; // Should output hello world 

如果它是一個第三方,可能他們希望你能發送JSON在後身體。要做到這一點,請按照這個帖子:How to post JSON to PHP with curl

相關問題