PHPでJSON形式に変換するためのjson_encode関数の使い方
はじめに
PHPでは、データをJSON形式に変換するための関数を使用することができます。本記事では、その関数について主なオプションを含めた使い方を、使用例や出力結果と合わせて紹介します。その前に、まずはJSONの意味と、PHPでデータをJSON形式に変換する過程で使用する連想配列について説明します。
JSONとは
JSON(JavaScript Object Notation)は、PHPやJava、Ruby、Pythonなどの様々なプログラミング言語に対応するデータ記述言語です。つまり、JSONを使用することでプログラミング言語を問わずデータの受け渡しが可能となります。以下の例に示すように、JSONの基本的な構成は、オブジェクトと呼ぶ{…}の中に「”キー” : “値”」のペアが「,(カンマ)」で複数連結したものとなっています。
{ "name":"日本太郎", "age":30, "country":"日本", "city":"東京都" }
JSONで使用できる型は、文字列以外に数値や null、真偽値、オブジェクト、配列を使用することができます。オブジェクトと配列を使用した例を以下に示します。
オブジェクト
{ "id":"abcd", "pass":"a1234", "user_info":{ "name":"日本太郎", "age":30 } }
配列
{ "animals":["cat","dog","bird"] }
連想配列とは
通常の配列は、配列に格納している複数のデータの中から要素番号を指定してデータを取得します。それに対して、連想配列は、番号の代わりに文字をキーとして設定し、文字で指定したデータを取得することができる配列です。そのため、以下の例ではいずれも「猫 犬」という出力結果を得ることができます。
<?php //通常の配列 $array=array('猫','犬'); echo $array[0]." ".$array[1].PHP_EOL; //連想配列 $acArray=array('動物1'=>'猫','動物2'=>'犬'); echo $acArray['動物1']." ".$acArray['動物2'].PHP_EOL; ?>
PHPでのJSON形式への変換方法
PHPにおいて、JSON形式のフォーマットに値を変換するには、json_encode関数を使用します。json_encode関数の戻り値は、値の変換が成功するとJSON形式に変換された文字列を返し、失敗するとFALSEを返します。
json_encode関数の基本的な使い方
json_encode関数の書式は以下のとおりです
string json_encode ($value [,$options [$depth]]);
- value - 引数valueには、JSON形式に変換する値を指定します。外部リソースへのリファレンスを保持するリソース型を除き、任意の型を指定できます。
- options - JSON定数をオプションとして指定できます。
- depth - 正の数で最大の深さを指定します。
json_encode関数の使用例は以下のとおりです。
<?php $user_array=array( 'name'=>'日本太郎', 'age'=>30, 'country'=>'日本', 'city'=>'東京'); $json=json_encode($user_array); echo $json; ?>
上記を実行すると、以下のように出力されます。
{"name":"\u65e5\u672c\u592a\u90ce","age":30,"country":"\u65e5\u672c","city":"\u6771\u4eac"}
JSONの文字コードはUnicodeであるため、アルファベットは問題なく出力されますが、日本語はUnicode文字に変換され、「\u65e5\u672c(日本)」のように表現されています。しかし、json_encode関数では、オプションを指定することで、Unicode文字に変換されないようにできます。
オプション:JSON_UNESCAPED_UNICODE
JSON_UNESCAPED_UNICODEは、日本語をUnicodeにエンコードすることなく、そのままJSON形式に変換してくれます。
<?php $user_array=array( 'name'=>'日本太郎', 'age'=>30, 'country'=>'日本', 'city'=>'東京'); $json=json_encode($user_array, JSON_UNESCAPED_UNICODE); echo $json; ?>
上記のように、json_encode関数の引数にJSON_UNESCAPED_UNICODEを指定すると、以下のように表示されます。
{"name":"日本太郎","age":30,"country":"日本","city":"東京"}
オプション:JSON_PRETTY_PRINT
JSON_UNESCAPED_UNICODEによって日本語が表現できるようになりましたが、横並びのため、ペアとペアの間が認識しにくいままです。そこで、JSON_PRETTY_PRINTを使用します。JSON_PRETTY_PRINTは、自動的に改行とインデントを付けてくれるオプションです。引数にオプションを複数指定する場合は、下記のようにオプション間を「|(Vertical bar)」で区切ります。
<?php $user_array=array( 'name'=>'日本太郎', 'age'=>30, 'country'=>'日本', 'city'=>'東京'); $json=json_encode($user_array,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo $json; ?>
上記を実行すると、以下のように出力されます。
{ "name": "日本太郎", "age": 30, "country": "日本", "city": "東京" }
以上を踏まえて、前半の「JSONとは」で示した、オブジェクトや配列を値に保持するJSONデータをPHPで出力するには、以下のように記述します。
<?php $user_array=array( 'id'=>'ABCD', 'pass'=>'a1234', 'user_info'=>array( 'name'=>'日本太郎', 'age'=>30, 'favorite_animals'=>["猫","犬","鳥"] ), ); $json=json_encode($user_array,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo $json; ?>
上記を実行すると、以下のように出力されます。
{ "id": "ABCD", "pass": "a1234", "user_info": { "name": "日本太郎", "age": 30, "favorite_animals": [ "猫", "犬", "鳥" ] } }
まとめ
本記事では、PHPにおいてデータをJSON形式に変換するjson_encode関数の使い方を例を挙げつつ、紹介しました。使用例から分かるように、json_encode関数の使用方法はシンプルです。PHPの学習を開始して日が浅い方も試してみてはいかがでしょうか。