2016-09-09 5 views
1

Это простой JSON, но он не может получить доступ к элементу. Я отправляю этот JSON для get.php и там просто print_r JSON и в разборе JSON-ответа проблема.Как эхо JSON в PHP (объект stdClass)?

Мой код:

$url = "http://localhost/get.php";  
    $data = array(
     'item1'  => 'value1', 
     'item2'  => 'value2', 
     'item3'  => 'value3' 
    ); 


$content = json_encode($data); 

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, 
array("Content-type: application/json")); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $content); 

$json_response = curl_exec($curl); 
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

if ($status == 201) { 
die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " curl_errno($curl)); 
} 


curl_close($curl); 
$response = json_decode($json_response, false); 
$result=json_encode($json_response); 
$data=json_decode($result); 

Как я могу повторить пункт 1 или 2?

Это get.php

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $data = json_decode(file_get_contents("php://input")); 
    print_r($data); 
} 
+1

JSON не имеет никакого значения. после его декодирования это структура данных PHP, как и любая другая структура данных PHP. в нем не будет абсолютно никакого следа, который говорит: «Раньше я был json». Вы получаете доступ к данным, как и любая другая php-структура. –

+2

Простой 'echo $ result ['item1'];', 'echo $ result ['item2'];' будет делать. Кстати, нет смысла кодировать его, а затем снова декодировать. –

+2

Что это связано с 'stdClass Object'? Когда вы используете 'true' как второй аргумент' json_decode() ', он возвращает ассоциативный массив, а не объект. – Barmar

ответ

2

Поскольку get.php использует print_r(), он не возвращает JSON. Он должен использовать json_encode().

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $data = json_decode(file_get_contents("php://input")); 
    echo json_encode($data); 
} 

Тогда ваш скрипт curl может его правильно декодировать.

$response = json_decode($json_response, false); 
echo 'Item1 = ' . $response->item1 . '<br>'; 
echo 'Item2 = ' . $response->item2 . '<br>'; 
echo 'Item3 = ' . $response->item3; 
+0

Спасибо вам очень много. : X: X –

-1
curl_close($curl); 
$result = json_decode($jsonResponse, true); 
echo $result['item1']; //Echo item 1. 
+0

ничего не возвращает –

+0

Вы можете видеть ключи в вопросе, они не являются числовыми. – Barmar

+0

Вот почему я добавил другой ответ. Похоже, он не получает массив в качестве результата. 'http: // php.net/manual/en/function.json-decode.php' говорит' json_decode ($ json, true) 'возвращает массив ... – user3743266

0

Вам не нужно устанавливать второй из параметров в функции json_decode для получения StdClass.

$data = array(
    'item1' => 'value1', 
    'item2' => 'value2', 
    'item3' => 'value3' 
); 
$json=json_encode($data); 
$result=json_decode($json); 
echo $result->item1; 
echo $result->item2; 
echo $result->item3; 

Или вы можете работать с массивом

$json=json_encode($data); 
$result=json_decode($json, true); 
echo $result['item1']; 
echo $result['item2']; 
echo $result['item3']; 
0

json_encode() использование для кодирования данных, затем распечатать JSon

$data = json_decode(file_get_contents("php://input")); 
    echo json_encode($data); 
Смежные вопросы