PHP decode JSON POST
json, php
Solution
The JSON data you're submitting is not valid JSON.
When you use ' in your shell, it will not handle \" as you suspect.
curl -v --header 'content-type:application/json' -X POST --data '{"content":"test content","friends": ["38383","38282","38389"],"newFriends":0,"expires":"5-20-2013","region":"35-28"}'
Works as expected.
<?php
$foo = file_get_contents("php://input");
var_dump(json_decode($foo, true));
?>
Outputs:
array(5) {
["content"]=>
string(12) "test content"
["friends"]=>
array(3) {
[0]=>
string(5) "38383"
[1]=>
string(5) "38282"
[2]=>
string(5) "38389"
}
["newFriends"]=>
int(0)
["expires"]=>
string(9) "5-20-2013"
["region"]=>
string(5) "35-28"
}
Problem
I"m trying to receive `POST` data in the form of JSON. I'm curling it as: ``` curl -v --header 'content-type:application/json' -X POST --data '{"content":"test content","friends":[\"38383\",\"38282\",\"38389\"],"newFriends":0,"expires":"5-20-2013","region":"35-28"}' http://testserver.com/wg/create.php?action=post ``` On the PHP side my code is: ``` $data = json_decode(file_get_contents('php://input')); $content = $data->{'content'}; $friends = $data->{'friends'}; // JSON array of FB IDs $newFriends = $data->{'newFriends'}; $expires = $data->{'expires'}; $region = $data->{'region'}; ``` But even when I `print_r ( $data)` nothing gets returned to me. Is this the right way of processing a `POST` without a form?