json 和PHP的編碼轉換問題

來源:互聯網
上載者:User
這篇文章主要介紹了json 和PHP的編碼轉換問題,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下




※前提:json與php分別在前後台 相互傳遞資料時可能出現的資料轉換情況處理(主要針對數組):


☆前台代碼:

var arr = {"name":"張偉","age":19}; //此時產生的是json的數組
arr = json.stringify(arr); //此時將arr轉換成 json的字串類型
$.ajax({               type:"post",                url:url,                data:{arr:arr}, //將轉換成字串類型的json傳遞給php後台,換換成字串類型後可以一次性傳遞多個資料                success:function(res){                                          console.log(res);                                    }            });


☆後台代碼(只傳遞字串時):

map = $_POST['arr'];             $map = json_decode($map);//json對象 解碼之後PHP可以使用,但要用json的方法在後台使用$map->name  echo $map->name; // 會輸出到res中, 通過consolve.log(res) 可以直接輸出



問題


關於php和json傳遞數組的情況,從後台傳資料到前台有兩種方法:echo,ajaxreturn


$1 第一種方法:

echo ,需要自行進行encode 編碼後輸出json 字串


這時,有兩種情況,一種是返回從前台接收過來的json字串,一種是後台建立新的數組,並且返回前台。


$1.1 後台接收前台資料,並將相同資料返回

$map = $_POST['arr'];//從前台傳遞過來的$map$map = json_decode($map);//json對象 解碼之後給php後台使用.....$map = json_encode($map);//對json數組進行編碼產生json字串echo $map; //輸出$map到前台

$1.2 後台建立程式,並且返回前台

$mapN = json_encode($mapN);//在後台自行建立的數組,在傳遞給前台之前同樣需要進行編碼echo $mapN;

$1.3 前台操作

res = eval("("+res+")");//通過res將從後台傳過來的json字串轉換成數組console.log(res.name);


$2 第二種方法:

ajaxreturn,傳遞數組時不需要encode編碼,預設傳遞的是就是json的字串形式,但在前台需要eval進行轉換,將json字串轉換成數組



這時,有兩種情況,一種是返回從前台接收過來的json字串,一種是後台建立新的數組,並且返回前台。

$2.1 從前台接收程式,並直接從後台返回前台

$map = $_POST['arr'];$map = json_decode($map);//json對象 解碼之後$this->ajaxReturn($map,'json');


$2.2 後台建立程式,並且返回前台

$mapN = array("name"=>"zhangwei");$this->ajaxReturn($mapN,'json');// 此時不需要json_encode() ,前台通過mapN.name 或者mapN['name']輸出

$2.3 前台操作

res = eval("("+res+")");//通過res將從後台傳過來的json字串轉換成數組console.log(res.name);



$3 補充:

echo 和 ajaxreturn 在關於 從後台傳遞資料到前台的區別:

echo 不會替php數組編碼成json傳遞式的格式——json字串類型

ajaxreturn 會自動調用json_encode函數進行編碼


二者相同的地方:

在傳遞json數值到前台之後都需要eval(“(”+res+“)”)進行轉換成json數組,才可以使用




$4 注意:

這裡後台 通過echo或者ajaxreturn都可以返回資料給前台的 success:function(res)


但是返回之後的資料使用方式不同:

一、字串類型:後台通過echo,可以直接輸出字串到前台的res,


二、數群組類型:不論是前台傳過來的json的字串類型數群組類型,還是後台產生的數群組類型,通過ajaxreturn的方式返回到前台的可以通過:數組名['keyname'] 或者 數組名.keyname 的方式調用



小tips:

一、在前台往後面傳json的字串(本身是數組,但在前台通過stringify轉換成json字串),在後台需要json_decode進行解碼,轉換成php可以使用的json數組, 調用方式 數組名->key

二、在後台建立的數組,若通過json_encode 轉換成 json字串,資料傳到前台後,需要通過 res = eval("("+res+")"); 轉換成json數組, 前台調用方式: 數組名['keyname'] 或者 數組名.keyname

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.