2012-11-07 53 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

相关问题