PHP-декодирование JSON POST

Я пытаюсь получить данные POST в форме JSON. Я скручиваю его как:

 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 

На стороне PHP мой код:

 $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'}; 

Но даже когда я print_r ( $data) мне ничего не возвращается. Это правильный способ обработки POST без формы?

Данные JSON, которые вы отправляете, недействительны JSON.

Когда вы используете «в своей оболочке, он не будет обрабатывать», как вы подозреваете.

 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"}' 

Работает так, как ожидалось.

 <?php $foo = file_get_contents("php://input"); var_dump(json_decode($foo, true)); ?> 

Выходы:

 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" }