ホームページ >バックエンド開発 >PHPチュートリアル >json_encode と json_decode の違いを比較する

json_encode と json_decode の違いを比較する

巴扎黑
巴扎黑オリジナル
2017-07-20 17:22:442144ブラウズ

JSONの4つの基本原則

1) 並列データはカンマ(,)で区切る
2) マッピングは(":")コロンで表現する
3) 並列データの集合(データ)は角括弧( "[]") は
4) マップされたコレクション (オブジェクト) は中括弧 ("{}") で表されます

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 文字列を JSON 形式でエンコードする

命令
mixed json_decode ( string $ json [, bool $assoc ] )
JSON 形式の文字列を受け入れ、それを PHP 変数に変換します。

パラメータ

json
デコードされる JSON 文字列形式の文字列。

assoc
このパラメータが TRUE の場合、オブジェクトの代わりに配列が返されます。


オブジェクトを返すか、オプションの assoc パラメータが TRUE の場合は、代わりに連想配列が返されます



例 #1 json_decode() の例

次のようにコードをコピーします。 php

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ; var_dump(json_decode($json, true));

?>




上記の例は次のようにコードをコピーします:


object(stdClass)#1 (5) {

[" a"] => int(1)

["b"] => int(2)
["c"] => int(3)
["d"] => int(4)

["e" ] => int(5)

}

array(5) {
["a"] => int(1)
["b"] => int(2)
> int(3)
["d"] => int(4)
["e"] => int(5)
}





次のようにコードをコピーします:


$data=' [{"名前":"a1","番号":"123","続き番号":"000","QQNo":""},{"名前":"a1","番号":"123" ,"続き番号":"000","QQNo":""},{"名前":"a1","番号":"123","続き番号":"000","QQNo ":""}] ';
echo json_decode($data);


結果は次のようになります:

Array ( [0] => stdClass Object ( [Name] => ; a1 [Number] ] => 123 [続き番号] => 000 [QQNo] => ) [1] => stdClass オブジェクト ([名前] => a1 [番号] => 000 [ QQNo] => ) [2] => stdClass オブジェクト ( [名前] => a1 [番号] => 123 [Contno] => 000 [QQNo] => ) )


json_decode() によってコンパイルされたオブジェクトがオブジェクトであることがわかります。 次に、 json_decode($data,true) を出力してみます。



次のようにコードをコピーします。

結果:

次のようにコードをコピーします:



Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => 配列 ( [名前] => a1 [番号] => 123 [連続番号] => 000 [QQNo] => ) [2] => 配列 ( [名前] => ; a1 [Number] => 123 [Contno] => 000 [QQNo] => ) )

これにより、次のことがわかります。 json_decode($ data) はオブジェクトを出力し、 json_decode("$arr",true) は PHP 連想配列を強制的に生成します。 json > ;= 1.2.0)

json_encode — 変数の JSON エンコード

バグを報告する 説明
string json_encode (mixed $value [, int $options = 0 ] )
値の JSON 形式を返す

バグを報告パラメータ


エンコードされる値は、リソースタイプを除く任意のデータタイプにすることができます

この関数は、UTF-8 でエンコードされたデータのみを受け入れることができます


オプション
次の定数で構成されるバイナリマスク: JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS 、JSON_NUMERIC_CHECK、JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、JSON_FORCE_OBJECT、JSON_UNESCAPED_UNICODE

バグを報告する 戻り値
エンコードが成功した場合は JSON 形式で表される文字列を返し、失敗した場合は FALSE を返します。

バグを報告する 更新ログ
バージョン 説明
5.4.0 オプションパラメータに定数が追加されました: JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、および JSON_UNESCAPED_UNICODE。
5.3.3 options パラメーターは定数 JSON_NUMERIC_CHECK を追加します。
5.3.0 は options パラメータを追加します


バグを報告する 例

例 #1 json_encode() の例


次のようにコードをコピーします。


$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=> 5);

echo json_encode($arr);

上記のルーチンは次のようにコードをコピーします:

{"a":1,"b":2 , "c":3,"d":4,"e":5}


例 #2 json_encode() 関数での options パラメーターの使用法

次のようにコードをコピーします。 php
$a = array('',"'bar'",'"baz"','&blong&', "xc3xa9");

echo "通常: ", json_encode($a), " n" ;

echo "タグ: ", json_encode($a, JSON_HEX_TAG), "n";

echo "Apos: ", json_encode($a, JSON_HEX_APOS), "n";

echo "Quot: ", json_encode( $a , JSON_HEX_QUOT), "n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE),
echo "すべて: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "nn";

$b = array();

echo "配列としての空の配列出力: ", json_encode($b) ), "n";
echo "オブジェクトとしての空の配列出力: ", json_encode($b, JSON_FORCE_OBJECT), "nn";非連想配列を配列として出力: ", json_encode($c), "n";
echo "非連想配列をオブジェクトとして出力: ", json_encode($c, JSON_FORCE_OBJECT), "nn";

$d = array( 'foo' => 'bar', 'baz' => 'long');

echo "連想配列は常にオブジェクトとして出力されます: ", json_encode($d), "n";配列は常にオブジェクトとして出力します: ", json_encode($d, JSON_FORCE_OBJECT), "nn";
?>



上記のルーチンは出力します:


次のようにコードをコピーします:


Normal: [" タグ: ["u003Cfoou003E","'bar'",""baz"","&blong&", "u00e9" ]
Apos: ["","u0027baru0027",""baz"","&blong&","u00e9"]
引用: ["","'bar'", "u0022bazu0022" ,"&blong&","u00e9"]

アンプ: ["","'bar'",""baz"","u0026blongu0026","u00e9"]

Unicode: ["<; foo>" ,"'bar'",""baz"","&blong&","é"]
すべて: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]

空の配列を配列として出力: []

空の配列をオブジェクトとして出力: {}

非連想配列を配列として出力: [[1,2,3]]
非連想配列をオブジェクトとして出力: {"0": {"0 ":1,"1":2,"2":3}}

連想配列は常にオブジェクトとして出力されます: {"foo":"bar","baz":"long"}
連想配列は常にオブジェクトとして出力: {"foo":"bar","baz":"long"}



例 #3 連続配列と非連続配列の例


次のようにコードをコピーします。 ?php
echo "連続配列 ".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");

echo PHP_EOL." 不連続配列".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong) ");
var_dump(

$nonsequential,

json_encode($nonsequential)
);

echo PHP_EOL."連続配列値を削除することで生成された非連続配列".PHP_EOL;

unset($sequential[1]) ;

var_dump(

$sequential ,
json_encode($sequential)
?>



次のようにコードをコピーします。


連続配列
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
string( 3) "baz"
[3]=>
string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非連続配列
array(4) {
[1]=>string(3) "foo"
string(3) "bar"
string(3) " バズ"
[4]=>
string(5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz" , "4":"blong"}"

連続配列の値を削除して生成された非連続配列
array(3) {
[0]=>
string(3) "foo"
[2]= > ;
文字列(3) "バズ"
[3]=>
文字列(5) "ブロンド"
}
文字列(33) "{"0":"foo","2":"バズ", " 3":"blong"}"




次のようにコードをコピーします:


$obj->Name= 'a1';$obj->Number ='123';

$obj- > Contno= '000';



結果は次のようになります:

{"Name":"a1",

"Number": "123",
"Contno":"000"
}

json_encode() と json_decode() はコンパイルと逆コンパイルのプロセスであることがわかります。json は utf-8 でエンコードされた文字のみを受け入れるので、パラメーターはjson_encode() のエンコーディングは UTF-8 である必要があります。そうでない場合は、空の文字または null が返されます。


json
デコードされる json 文字列形式の文字列。

assoc

このパラメータが TRUE の場合、オブジェクトの代わりに配列が返されます。

オブジェクトを返すか、オプションの assoc パラメータが TRUE の場合は、代わりに連想配列が返されます



例 #1 json_decode() の例


次のようにコードをコピーします。 php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ; var_dump(json_decode($json, true));
?>


上記の例は次のように出力します:

object(stdClass)#1 (5) {

["a" ] => int(1)

["b"] => int(2)

["c"] => int(3)
["d"] => e"] => int(5)
}

array(5) {
["a"] => int(1)
["b"] => int(2)

["c" ] => int(3)
["d"] => int(4)
["e"] => int(5)

コードは次のとおりです。

$data ='[{"名前":"a1","番号":"123","続き番号":"000","QQNo":""},{"名前":"a1","番号":" 123","連続番号":"000","QQNo":""},{"名前":"a1","番号":"123","連続番号":"000","QQNo ":"" }]';
echo json_decode($data);


結果は次のようになります:

次のようにコードをコピーします:


Array ( [0] => stdClass Object ( [Name] => ; a1 [番号] = > 123 [QQNo] => ) [1] => a1 [番号] => > 000 [QQNo] => ) [2] => stdClass オブジェクト ( [名前] => a1 [番号] => 123 [Contno] => 000 [QQNo] => )


json_decode () の後に、コンパイルされたオブジェクトがオブジェクトであることがわかります。 次に、 json_decode($data,true) を出力してみます。

echo json_decode($data,true);
結果:

次のようにコードをコピーします:



Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ; ) [1] => 配列 ( [名前] => a1 [番号] => 123 [連続番号] => 000 [QQNo] => ) [2] => 配列 ([名前] = > a1 [番号] => 123 [連続番号] => 000 [QQNo] =>
json_decode($data,true) が連想配列を出力することがわかります。このことから、json_decode($data) がオブジェクトを出力し、json_decode("$arr",true) が PHP 連想配列を生成することがわかります。

2.json_encode()

json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_encode — 変数の JSON エンコード

バグを報告する 説明
string json_encode (混合) $ value [, int $options = 0 ] )
JSON 形式の value を返す

バグパラメータを報告する

value
エンコードされる値は、リソースタイプを除き、任意のデータタイプにすることができます

この関数はUTF-8 でエンコードされたデータを受け入れる

オプション
次の定数で構成されるバイナリ マスク: JSON_HEX_QUOT、JSON_HEX_TAG、JSON_HEX_AMP、JSON_HEX_APOS、JSON_NUMERIC_CHECK、JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、JSON_FORCE_OBJECT、 _ UNICODE。

バグを報告する 戻り値
エンコーディングが次の場合は 1 を返します。成功した場合は JSON として表される文字列、または失敗した場合は FALSE として表されます。

バグを報告する 更新ログ
バージョン 説明
5.4.0 オプションパラメータに定数が追加されました: JSON_PRETTY_PRINT、JSON_UNESCAPED_SLASHES、および JSON_UNESCAPED_UNICODE。
5.3.3 options パラメーターは定数 JSON_NUMERIC_CHECK を追加します。
5.3.0 オプションパラメータを追加しました。


バグを報告する 例

例 #1 json_encode() の例

次のようにコードをコピーします:


$arr = array ('a'= >1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr)?>

上記のルーチンは出力します:

次のようにコードをコピーします:

{"a":1,"b":2,"c":3,"d":4,"e":5

例 #2 json_encode() 関数での options パラメーターの使用法

次のようにコードをコピーします:

$a = array('',"'bar'", '" baz"','&blong&', "xc3xa9");

echo "通常: ", json_encode($a), "n";
echo "タグ: ", json_encode($a, JSON_HEX_TAG) ";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "n";
echo "Amp: ", json_encode($ a, Json_hex_amp), "n";
echo "unicode:", json_encode ($ a, json_unescaped_unicode), "n";
echo "all:", json_encode ($ a, json_hex_tag | json_hex _Apos | json_hex_quot | json_hex_amp | json_unescaped_unicode ), " nn";

$b = array();

echo "配列としての空の配列出力: ", json_encode($b), "n";
echo "オブジェクトとしての空の配列出力: ", json_encode( $b, JSON_FORCE_OBJECT), "nn";

$c = array(array(1,2,3))

echo "配列としての非結合配列出力: ", json_encode($c), "n" ;
echo "オブジェクトとしての非連想配列出力: ", json_encode($c, JSON_FORCE_OBJECT), "nn"; 'foo' => 'bar', 'baz' => long') ;

echo "連想配列は常にオブジェクトとして出力されます: ", json_encode($d), "n";
echo "連想配列は常にオブジェクトとして出力されます: ", json_encode($d, JSON_FORCE_OBJECT) ;
? >


上記のルーチンは次のようにコードをコピーします:


通常: ["","'bar'",""baz"","&blong&","u00e9"]
タグ: ["u003Cfoou003E","'bar'",""baz" ","&blong&","u00e9"]
引用: ["","u0027baru0027",""baz"","&blong&","u00e9"]
引用: ["", "'bar'","u0022bazu0022","&blong&","u00e9"]
アンプ: ["","'bar'",""baz"","u0026blongu0026","u00e9"]
Unicode: ["","'bar'",""baz"","&blong&","é"]
すべて: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026", "é"]

空の配列を配列として出力: []
空の配列をオブジェクトとして出力: {}

非連想配列を配列として出力: [[1,2,3]]
非連想配列をオブジェクトとして出力: {"0":{"0":1,"1":2,"2":3}}

連想配列は常にオブジェクトとして出力されます: {"foo":"bar","baz":"long "}
連想配列は常にオブジェクトとして出力されます: {"foo":"bar","baz":"long"}


例 #3 連続配列と非連続配列の例

コードをコピーする コードは次のとおりです。 :


echo "連続配列".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode() $sequential)
) ;

echo PHP_EOL."不連続配列".PHP_EOL;
$nonsequential = array(1=>"bar", 3=>"baz", 4=>"blong ");
var_dump(
$nonsequential,
json_encode($nonsequential)
);

echo PHP_EOL. "連続配列値を削除することによって生成された非連続配列".PHP_EOL; $sequential[1]) ;
var_dump(
$sequential,
json_encode($sequential)
);


上記のルーチンは次のように出力します。連続配列

array(4) {
[ 0]=>string(3) "foo"
string(3) "bar"

string(3) "baz"

[3]=>

string(5) "blong"
}
string(27) "["foo","bar","baz","blong"]"

非連続配列
配列(4) {
[1]= >
文字列(3) "foo"
[2]=>
文字列(3) "バー"
[3]=> "
[4]=>
string( 5) "blong"
}
string(43) "{"1":"foo","2":"bar","3":"baz"," 4":"blong"}"

Delete 連続配列値によって生成された非連続配列
array(3) {
[0]=>
string(3) "foo"
[2] =>
文字列(3) "バズ"
[3 ]=>
文字列(5) "ブロンド"
}
文字列(33) "{"0":"foo","2":"バズ" ,"3":"blong"}"



次のようにコードをコピーします:


$obj->Name= 'a1';$obj->Number ='123';
$obj-> ;Contno= '000';
echo json_encode($obj);


次のようにコードをコピーします:


{"Name":"a1",

"Number":"123" ,

"Contno":"000"
}


json_encode() と json_decode() はコンパイルと逆コンパイルのプロセスであることがわかります。json は utf-8 でエンコードされた文字のみを受け入れるため、json_encode() のパラメーターは次のようにする必要があります。 utf-8 でエンコードされている場合、空の文字または null が返されます。

以上がjson_encode と json_decode の違いを比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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