PHPと他のプログラム言語間でデータのやりとりをするときに用いられるJSON。本記事では、JSON関数を使ったデータの変換と取得の方法について解説します。また、UnicodeのJSONで日本語を扱う方法についても紹介していますよ。
目次
JSONとは各プログラム言語間で使えるデータ形式
そもそもJSONとは「JavaScript Object Notation 」の略で、日本語にすると「JavaScriptのオブジェクトの表記法」のことです。つまり、JavaScriptのオブジェクト式のデータフォーマットのことです。
JSONが広く使われている最大の理由は、様々なプログラム言語に対応している点です。例えば、JavaScript、PHP、Rubyといったプログラム言語がJSONのデータ形式に対応しています。そのため、JSONのフォーマット形式を用いることで、JavaScriptを使ったプログラム、PHPを使ったプログラム、Rubyを使ったプログラムなど、全てのプログラム言語間でデータをやり取りすることができます。
JSONで使われるデータ構造とは
JSONで使われるデータ構造にはオブジェクト形式と配列形式の2種類あります。そこで、各形式について紹介していきます。
オブジェクトの場合
JSONで主に使われているのがオブジェクト形式です。オブジェクトは、「キー」と「値」の組み合わせデータにより成り立っています。
コードの書き方は、全体を「{」と「}」で囲み、「キー」と「値」の間はコロン(:)で区切ります。また、ペアの間はカンマ(,)で区切ります。
1 2 3 4 5 |
{ "name": "山田太郎", "birthday": "19931022", "sex": "male", } |
上記の場合、3つのペアのデータを持ったオブジェクト形式のJSONです。
配列の場合
JSONでは、「キー」に対して複数の「値」がある場合、配列形式で複数の値を格納できます。
配列形式で値を格納する場合、値全体を「[」と「]」で囲み、各値をカンマ(,)で区切ります。
1 2 3 4 5 6 7 |
{ "hobby": [ "釣り", "映画", "食べ歩き" ] } |
上記の場合、「キー(hobby)」に3つの値(釣り、映画、食べ歩き)を持った配列形式のJSONです。
PHPでJSONに変換する方法
PHPで扱っているデータを、そのまま他のプログラムに渡しても、違う言語のプログラムでは、データの読み取り処理ができません。そのため、他のプログラムにデータを渡す場合には、共通言語であるJSON形式に変換したデータを渡す必要があります。この変換する処理のことをエンコードといいます。
そこで、PHPのデータをJSONのデータに変換する方法について紹介します。
json_encode関数でPHP連想配列をJSONにする
json_encode関数は、指定した値をJSON形式に変換した文字列で返す関数です。PHP連想配列をJSON形式にエンコードされたデータに変換する場合もjson_encode関数を使用します。
使い方は次の通りです。
1 |
string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] ) |
- 第一引数にJSON形式に変換したい値を指定する
- 第二引数にJSON定数を指定する
- 第三引数に最大の深さを指定する
- 返り値はJSONエンコードされた文字列を返す
- 処理に失敗した場合はFALSEを返す
実際にPHPの連想配列をjson_encode関数でJSON形式にする場合のサンプルコードを紹介します。
1 2 3 4 5 6 7 8 9 10 |
<?php $aaa = ['word1'=>'a', 'word2'=>,'b' 'word3'=>'c']; //連想配列をJSON形式に変換 $bbb = json_encode($aaa); echo $bbb; ?> |
これで、「$bbb」にJSON形式にエンコードされたデータが格納されます。
実行すると、次のように出力されます。
1 |
{"word1":a,"word2":b,"word3":c} |
JSONエンコード時に改行を指定する
PHPのデータをJSON形式にエンコードするときに、 json_encode関数のオプションとしてJSON_PRETTY_PRINTを指定することで、改行やインデントされたJSON形式のデータが格納されます。
1 2 3 4 5 6 7 8 9 10 |
<?php $aaa = ['word1'=>'a', 'word2'=>,'b' 'word3'=>'c']; //改行やインデントを指定して、連想配列をJSON形式に変換 $bbb = json_encode($aaa, JSON_PRETTY_PRINT); print_r($bbb); ?> |
これで、「$bbb」に改行やインデントを指定されたJSON形式にエンコードされたデータが格納されます。
実行すると、次のように出力されます。
1 2 3 4 5 |
{ "word1":a, "word2":b, "word3":c } |
PHPでJSONのデータを取得する方法
PHPでJSON形式にエンコードされたデータをPHPで扱える変数に変換するには、json_decode関数を使用します。
json_decode関数の使い方は次の通りです。
1 |
json_decode ( string $JSON文字列 [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) |
- 第一引数に変換するJSON文字列を指定する
- 第二引数以降でPHPの型を指定する
- 第三引数に最大の深さを指定する
- 返り値はPHPにデコードされた文字列を返す
- 処理に失敗した場合はNULLを返す
PHPを日本語のままJSONに変換する方法
JSONは文字コードにUnicodeが使用されているため、日本語が格納されたPHPのデータをエンコードした場合、Unicode文字に変換されます。変換後は、日本語を英数字で表した特殊な文字になり読めなくなります。しかし、デコードすることで再び日本語文字に戻るので基本的には無視して良いでしょう。
もし、見づらくて気になるのであれば、json_encode関数の第二引数にJSON定数のJSON_UNESCAPED_UNICODEを指定すると、日本語のままJSON形式に変換することができます。
まとめ
JSONを活用することで、PHPに限らず、各プログラム言語間でデータのやり取りができるようになります。
使い方は簡単で、渡したいときはPHPのデータをjson_encode関数でJSON形式に変換(エンコード)して、受け取りたいときには、JSONのデータはjson_decode関数でPHPのデータに戻す(デコード)だけです。