PHPではデータをJSON形式に変換したり、JSON形式をデコードする関数が用意されています。
この記事ではそんなPHPのJSONについて、
・json_encodeでデータをJSON形式に変換する方法
・日本語をJSON形式にエンコードする方法
・json_decodeでJSON形式のデータをデコードする方法
などの基本的な内容から、
・JSON形式のデータをPOSTで外部サイトへ送信する方法
などの応用的な使い方についても解説します。
ここでは、そんなJSON形式の処理について詳しく解説いたします!
JSONとは?
なんかJSONって言葉をちらほらと聞くけどJSONっていったい何者?
JSONとは、「JavaScript Object Notation」の略で、JavaScriptの処理でオブジェクトを記述するための書式のことを言うんだ。
うーん・・・イマイチよくわからないなぁ。
つまりJSONとはXMLやCSVファイルのように、簡潔に構造化されたデータを記述することが可能なんだよ。
そーなんだ。具体的にはどんな内容なの?
具体的にJSON形式は「キーと値」のペアで成り立っていて、JSON形式のデータを用意しておけば、データを共用して使用することが可能になるんだ。
つまり、JSONを使えば異なる言語のプログラム間でデータのやりとりが簡単にできるってことね♪
まぁざっくりとそんな感じだね!
ここではPHPでデータをJSON形式に変換する方法や、JSON形式でエンコードされたデータを元に戻す方法について解説していくよ。
json_encodeとは
指定した値をJSON形式に変換するには、json_encode関数を使用します。
json_encode関数は以下のように記述します。
書き方:
string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] )
引数:
第一引数にはJSON形式に変換するための文字列や配列を指定します。
第二引数を指定した場合は、どのような形式で変換するか、オプションで定数を指定することができます。
JSONの定義済定数については、以下のページを参照してください。
http://php.net/manual/ja/json.constants.php
第三引数を指定する場合は、最大の深さを正の数で指定することができます。
返り値:
json_encode関数は、戻り値にJSONエンコードされた値を返し、処理が失敗した場合はFALSEを返します。
注意点:
変換する全ての文字列データは文字コードUTR-8にエンコードされていなければいけません。
json_encodeの使い方
ここではjson_encode関数を使用して、指定した文字列の値をJSON形式に変換する方法を見ていきましょう。
以下に簡単なサンプルプログラムを紹介します。
サンプルプログラム
//配列を作成 $fruits_array = ['apple'=>'fruits1', 'orange'=>'fruits2', 'melon'=>'fruits3', 'pineapple'=>'fruits4', 'Strawberry'=>'fruits5' ]; //配列をJSON形式に変換 $jsonstr = json_encode($fruits_array); echo $jsonstr;
実行結果:
{"apple":"fruits1","orange":"fruits2","melon":"fruits3","pineapple":"fruits4","Strawberry":"fruits5"}
実行結果を見てみると文字列と文字列の間にコロン(:)があって、それぞれカンマ(,)区切られているわね!
JSONは「キーと値」のペアとして構成されていることは説明したけど、json_encodeを使うと「キー:値, キー:値」のようにキー:値のペアがカンマ(,)で区切られているJSON形式に変換してくれるんだ!
なるほど!思ったより簡単ね!
そんなjson_encode関数のさまざまな使い方や、日本語に変換する方法については、以下の記事でも詳しく解説してるから参考にしてみるよいいよ。
json_encodeのさらに詳しい使い方はこちらの記事で解説しています!
日本語をjson_encodeする
日本語が含まれる配列をjson_encodeでエンコードすると、日本語が文字コードで表示されてしまいます。
そのため、日本語をjson_encodeするには、第二引数にJSON_UNESCAPED_UNICODEを指定します。
JSON_UNESCAPED_UNICODEを指定すると、マルチバイト文字をそのままの形式で扱います。
サンプルプログラム
//配列を作成 $fruits_array = ['apple'=>'りんご', 'orange'=>'オレンジ', 'melon'=>'メロン', 'pineapple'=>'パイナップル', 'Strawberry'=>'ストロベリー' ]; //配列をJSON形式に変換 $jsonstr = json_encode($fruits_array, JSON_UNESCAPED_UNICODE); echo $jsonstr;
実行結果:
{"apple":"りんご","orange":"オレンジ","melon":"メロン","pineapple":"パイナップル","Strawberry":"ストロベリー"}
json_decodeとは
JSON形式にエンコードされた文字列を受け取って、デコードするにはjson_decode関数を使用します。
デコードとは、簡単に説明するとエンコードされたデータを元に戻すことを言います。
json_decode関数は、以下のように記述します。
書き方:
json_decode ( string $JSON文字列 [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
引数:
第一引数にはデコード対象のJSON文字列を指定します、以降の引数は各種オプションを指定します。
assoc:TRUEの場合は連想配列の形式で返されます。
depth:ユーザー指定の再帰の深さを指定します。
options:JSONデコードオプションのビットマスクを指定します。
返り値:
JSONエンコードされたデータを、適切なPHPの型として返します。
デコードを失敗したり、再起制限を超えている場合はNULLを返します。
json_decodeの使い方
ここではjson_decode関数を使用して、指定した文字列の値をデコードする方法を見ていきましょう。
以下に簡単なサンプルプログラムを紹介します。
サンプルプログラム
//配列を作成 $fruits_array = ['apple'=>'fruits1', 'orange'=>'fruits2', 'melon'=>'fruits3', 'pineapple'=>'fruits4', 'Strawberry'=>'fruits5' ]; //配列をJSON形式に変換 $jsonstr = json_encode($fruits_array); //JSON形式を元に戻す $fruits = json_decode($jsonstr, true); print_r($fruits);
実行結果:
Array ( [apple] => fruits1 [orange] => fruits2 [melon] => fruits3 [pineapple] => fruits4 [Strawberry] => fruits5 )
json_decodeを使えばJSON形式のデータを配列に戻せるってことね♪
でもひとつ決まりがあって、json_decodeの返り値を連想配列で受け取るためには、第二引数をTRUEで指定する必要があるから気をつけてね!
わかりました!
JSON形式のデータをPOSTで送信する
JSON形式のデータをPOSTで送信することも可能です。
以下のサンプルではcURL関数を使用して、指定したサーバにJSON形式のデータをPOSTで送信しています。
サンプルプログラム
//配列を作成 $fruits_array = ['apple'=>'fruits1', 'orange'=>'fruits2', 'melon'=>'fruits3', 'pineapple'=>'fruits4', 'Strawberry'=>'fruits5' ]; //配列をJSON形式に変換 $jsonstr = json_encode($fruits_array); //セッションを初期化する $ch = curl_init(); //オプションの設定 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonstr); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, 'http://www.xxx.xxx'); //セッションの実行 $res = curl_exec($ch); //結果を表示する var_dump($res); //セッションを終了する curl_close($ch);
cURL関数による外部サイトとの送受信を行う処理の詳細については、以下の記事で詳しく解説しています!
まとめ
ここではJSON形式のデータを扱うために、
・json_encodeでデータをJSON形式に変換する方法
・日本語をJSON形式にエンコードする方法
・json_decodeでJSON形式のデータをデコードする方法
・JSON形式のデータをPOSTで外部サイトへ送信する方法
などについて解説しました。
JSON形式は、外部サイトやプログラム間でデータをやりとりするときに便利な形式ですので、この機会にぜひ覚えておきましょう!
もし、JSON形式にエンコード、デコードする方法を忘れてしまったら、この記事を思い出してくださいね!