ホームページ >バックエンド開発 >PHPチュートリアル >jsonとPHP間のエンコーディング変換の問題

jsonとPHP間のエンコーディング変換の問題

不言
不言オリジナル
2018-04-23 11:41:241360ブラウズ

この記事は主に json と PHP の間のエンコーディング変換の問題を紹介します。これで、必要な友達に参考にしていただけます。データを渡すときに発生する可能性のあるデータ変換状況の処理 (主に配列):


☆ フロントエンド コード:

<br/>
<br/>
var arr = {"name":"张伟","age":19}; //此时生成的是json的数组


☆ バックエンド コード (渡すだけの場合) strings):

arr = json.stringify(arr); //此时将arr转换成 json的字符串类型



Question

phpとjsonから配列を渡す場合について、バックグラウンドからフロントにデータを渡すには2つの方法があります: echo、ajaxreturn

$1 最初のタイプメソッド:

echo、自分でエンコードしてjson文字列を出力する必要があります

この時点で、2つの状況があります。1つはフロントから受け取ったjson文字列を返す方法と、バックグラウンド配列に新しいjson文字列を作成してフロントデスクに返す方法です。


$1.1 バックグラウンドはフォアグラウンドデータを受け取り、同じデータを返します


$.ajax({
               type:"post",
                url:url,
                data:{arr:arr}, //将转换成字符串类型的json传递给php后台,换换成字符串类型后可以一次性传递多个数据
                success:function(res){
                   
   
                    console.log(res);
                    
                }
            });

$1.2 バックグラウンドはプログラムを作成し、フロントエンドに戻ります

map = $_POST[&#39;arr&#39;];
            
 $map = json_decode($map);//json对象 解码之后PHP可以使用,但要用json的方法在后台使用$map->name 
 echo $map->name; // 会输出到res中, 通过consolve.log(res) 可以直接输出
$1.3 フォアグラウンド操作
$map = $_POST[&#39;arr&#39;];//从前台传递过来的$map
$map = json_decode($map);//json对象 解码之后给php后台使用
.....
$map = json_encode($map);//对json数组进行编码生成json字符串
echo $map; //输出$map到前台

$2 2番目の方法:


ajaxreturn、デフォルトでは、json の文字列形式が渡されますが、json 文字列を配列に変換するには eval が必要です。

このとき、フロントから受け取ったjson文字列を返す場合と、バックグラウンドで新しい配列を作成してフロントに返す場合の2つの状況があります。

$2.1 フロントからプログラムを受け取り、バックグラウンドから直接フロントに返却

$mapN = json_encode($mapN);//在后台自行创建的数组,在传递给前台之前同样需要进行编码
echo $mapN;


$2.2 バックグラウンドでプログラムを作成し、フロントに返却


res = eval("("+res+")");//通过res将从后台传过来的json字符串转换成数组
console.log(res.name);

$2.3 フォアグラウンド動作

$map = $_POST[&#39;arr&#39;];
$map = json_decode($map);//json对象 解码之后
$this->ajaxReturn($map,&#39;json&#39;);


$3 補足:
バックグラウンドからフロントエンドへのデータ転送に関する

echo と ajaxreturn の違い:

echo は、php 配列を json 転送形式 (json 文字列型) にエンコードしません

ajaxreturn はエンコードのために json_encode 関数を自動的に呼び出します


この 2 つの点は同じです:

フロントデスクに json 値を渡した後、変換するには eval ("("+res+")") する必要があります使用する前に json 配列に変換してください


$4 注:


ここで、バックエンドはフロントエンドにデータを返すことができます。成功: function (res) through echo または ajaxreturn


しかし、戻った後のデータ使用法は異なります:

1. 文字列型: バックエンドから

echo、フロントデスクの res に文字列を直接出力できます

2. 配列型: かどうかフロントデスクから渡されたjsonの文字列型配列型、またはバックグラウンドで生成された配列型で、ajaxreturnを通じて返されます。

を呼び出すことができます:
array name ['keyname']

または

array name.keyname String (それ自体は配列ですが、フォアグラウンドで stringify によって json 文字列に変換されます) は、バックグラウンドでデコードし、PHP で使用できる json 配列に変換するために json_decode が必要です。呼び出しメソッド 配列名 -> キー


2. バックグラウンドで作成された配列が json_encode を通じて json 文字列に変換される場合、データがフロントデスクに送信された後、 json 配列に変換される必要があります。

res = eval("("+res+")");

フロントデスク呼び出しメソッド:

配列名 ['keyname']

または 配列名.keyname

関連する推奨事項: php文字エンコード変換

PHPのエンコード変換で文字化けを解決する方法

以上がjsonとPHP間のエンコーディング変換の問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。