2013-02-16 21 views
8

I "m próbuje odbierać POST dane w postaci JSON Mam zwijając ją jako:PHP dekodowania JSON POST

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 

Na stronie jest mój kod 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'};  

Ale nawet gdy nie mam nic do mnie wracam, czy jest to właściwy sposób przetwarzania POST bez formularza?

+5

Dlaczego nie używasz 'json_decode ($ _ POST)'? – hohner

+1

@hohner gdy próbuję tego, to daje mi błąd 'json_decode() oczekuje, że parametr 1 będzie ciągiem, tablica podana' – Chris

+0

@hohner Ponieważ zakłada się, że '$ _POST' jest zakodowanym adresem URL. – deceze

Odpowiedz

20

Dane, które przesyłasz JSON, są nieprawidłowe JSON

Gdy używasz "w powłoce, to nie będzie obsługiwać \", jak podejrzewasz.

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

Działa zgodnie z oczekiwaniami.

<?php 
$foo = file_get_contents("php://input"); 

var_dump(json_decode($foo, true)); 
?> 

Wyjścia:

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