2013-02-16 25 views
8

I "m POST Daten in Form von JSON zu erhalten versucht, ich bin kräuselt es als:PHP dekodieren 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 

Auf der PHP-Seite ist mein Code:

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

aber selbst wenn ich print_r ($data) mir nichts zurückgegeben wird. ist dies der richtige Weg, um eine POST der Verarbeitung ohne Form?

+5

Warum bist du nicht mit 'json_decode ($ _ POST)'? – hohner

+1

@Hohner, wenn ich das versuche, gibt es mir den Fehler 'json_decode() erwartet Parameter 1 als String, Array gegeben' – Chris

+0

@hohner Da '$ _POST' ist URL-codierte Daten angenommen. – deceze

Antwort

20

die JSON-Daten Sie einreichen nicht gültig JSON ist.

Wenn Sie "in Ihrer Shell verwenden, wird es nicht behandeln", wie Sie vermuten.

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

Funktioniert wie erwartet.

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

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

Ausgänge:

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