簡體   English   中英

想在php中發送和接收json數據

[英]want to send and receive json data in php

根據應用程序的要求,我正在嘗試開發兩個可以通過Json相互通信的PHP。 我嘗試在線搜索,但沒有找到解決方案。

任何人都可以建議我正確的道路嗎?

我在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"]
             }
           ]
} 

我發送Json數據的Php代碼:(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);

?>

我接收Json數據的Php代碼:(rec.php)

<?php

$json_input_data=json_decode(file_get_contents('php://input'),TRUE);

echo $json_input_data;


?>

修改您的函數以在post請求中發送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格式,則不應使用json_encode ,請將代碼更改為:

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

請記住,JSON表示“對象表示法”,即它是一種在javascript中描述對象的方法。 這是在網絡級別進行通信的好方法,但是當您使用PHP時,您應該使用PHP旨在使用的數據結構。 而不是直接在任何一方使用JSON,尤其是作為大JSON字符串的替代,將數據結構化為數組並在發送之前對其進行編碼。 你使用curl的方法很好,雖然有點習慣 - 有很多很好的路由器可以更好地管理這些類型的請求(symfony是我最喜歡的),但這是一個單獨的問題。

例如,代替你的大字符串,將其表示為:

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

等等。當它發送到其他服務器時, json_encode然后去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM