хотите отправлять и получать данные json в php

В соответствии с требованиями приложения, я пытаюсь разработать два PHP, которые могут общаться друг с другом через Json. Я попробовал поиск в Интернете, но не нашел решение.

Может ли кто-нибудь предложить мне правильный путь для этого?

У меня есть данные в базе данных mysql, конвертированные данные будут в формате json, как указано ниже: (Также ищите код для получения этого формата данных через объект и массив PHP-JSON).

{ "user" : [ { "firstName" : "Vignesh", "lastName" : "Prajapati", "age" : 23, "email" : ["vignesh@gmail.com","vignesh@yahoo.com"], "subject" : ["English","Gujarati", "Hindi"] }, { "firstName" : "Vaibhav", "lastName" : "Prajapati", "age" : 19, "email" : ["vaibhav@gmail.com","vaibhav@yahoo.com","vaibhav@aol.com"], "subject" : ["English","Spanish", "Chinese","Sanskrit"] } ] } 

Мой Php-код для отправки Json-данных: (send.php)

 <?php $data = ' { "user" : [ { "firstName" : "Vignesh", "lastName" : "Prajapati", "age" : 23, "email" : ["vignesh@gmail.com","vignesh@yahoo.com"], "subject" : ["English","Gujarati", "Hindi"] }, { "firstName" : "Vaibhav", "lastName" : "Prajapati", "age" : 19, "email" : ["vaibhav@gmail.com","vaibhav@yahoo.com","vaibhav@aol.com"], "subject" : ["English","Spanish", "Chinese","Sanskrit"] } ] } '; $url_send ="http://localhost/rec.php"; $str_data = json_encode($data); function sendPostData($url, $post){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); curl_close($ch); // Seems like good practice return $result; } echo " " . sendPostData($url_send, $str_data); ?> 

Мой код Php для получения данных Json: (rec.php)

 <?php $json_input_data=json_decode(file_get_contents('php://input'),TRUE); echo $json_input_data; ?> 

Измените свою функцию для отправки заголовка JSON_DATA в почтовом запросе

 function sendPostData($url, $post){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($post)) ); $result = curl_exec($ch); curl_close($ch); // Seems like good practice return $result; } 

В использовании файлов

 <?php $json_input_data=json_decode(file_get_contents('php://input'),TRUE); print_r( $json_input_data); ?> 

Поскольку все сказали, что нет необходимости в $str_data = json_encode($data); , Так как данные уже находятся в json.

Помните, что JSON означает «объектная нотация», то есть это способ описать объект в javascript. Это отличный способ общения на сетевом уровне, но когда вы находитесь на PHP, вы должны использовать структуры данных, которые PHP предназначен для использования. Вместо того, чтобы работать с JSON напрямую с каждой стороны, и особенно в качестве альтернативы большой строке JSON, храните эти данные в виде массива и кодируйте их прямо перед отправкой. Ваш подход с завивкой в ​​порядке, хотя и немного обычен – есть много хороших маршрутизаторов, которые лучше справляются с управлением этими типами запросов (symfony – мой любимый), но это отдельная проблема.

например, вместо вашей большой строки, представляйте ее как:

 $data = [ "user" => [ [ "firstName" => "Vignesh", "lastName" => "Prajapati", "age" => 23, "email" => ["vignesh@gmail.com","vignesh@yahoo.com"], "subject" => ["English","Gujarati", "Hindi"] ] 

и т. д. Когда придет время отправить его на другой сервер, json_encode и перейдите.

Поскольку вы не должны использовать json_encode если данные уже находятся в json формате, измените код на что-то вроде:

 $data = array('user' => array( array('firstName' => 'Vignesh', 'lastName' => 'Prajapati'), array('firstName' => 'Vaibhav', 'lastName' => 'Prajapati') )); 

Конечно, вам нужно будет добавить и другие поля в массив.

Использование json_encode() для приведенных выше данных вернет:

 { "user" : [ { "firstName" : "Vignesh", "lastName" : "Prajapati" }, { "firstName" : "Vaibhav", "lastName" : "Prajapati" } ] }