そもそもJSONって何?
json_encodeの使い方について詳しく知りたい
PHPではあらゆる言語で共通して使用する、JSON形式のフォーマットに値を変換することができます。
この記事では、JSONの基本的な知識からjson_encodeを使用してJSON形式に変換する方法、JSON形式のデータを取得するjson_decodeの使い方などについて解説していきます。
※この記事ではPHPの「Version 7.1.1」で動作確認しました。
前提知識:JSON
そもそもJSONとは
JSON(JavaScript Object Notation)とは、JavaScriptの処理の中でオブジェクトを記述するためのデータ形式のことです。XMLのように簡潔に構造化されたデータを記述することが可能で、最も理解しやすいフォーマットと言えます。
JSON形式は「キーと値」のペアで成り立っていて、さまざまなプログラミング言語に対応しています。そのため、1つのJSON形式のデータを用意しておけばデータを共用することができます。
JSON形式についてもっと詳しく知りたい方は、以下のサイトを参照してください。
JavaScript Object Notation
JSONのデータ構造
JSONの構造以下のようになります。
{ "名前": "田中", "誕生日": "1987年6月9日", "住所": "東京都渋谷区渋谷一丁目XXXX", "年齢": "30歳" }
- JSON形式は波括弧{…}で囲まれています。
- 「キーと値」は”キー”: “値”となっていて間にコロン(:)で区切られます。
- 「キーと値」のペアとペアの間はカンマ(,)で区切られます。
1つのキーに複数登録する場合は、複数の値を配列のように角括弧[…]の中に記述し、値をカンマ(,)で区切ります。
{ "フルーツ": [ "りんご", "オレンジ", "メロン" ] }
JSON形式に変換する方法
json_encodeの使い方
json_encode関数は、指定した値をJSON形式に変換した文字列を返します。
string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] )
- 第一引数にJSON形式に変換する値を指定します。
- 第二引数にオプションとしてJSON定数を指定します。
- 第三引数には最大の深さを指定します。正の数で指定する必要があります。
- 戻り値にJSONエンコードされた文字列を返します。
- 処理が失敗した場合はFALSEを返します。
※JSONの定義済み定数については、以下のPHPマニュアルで詳しく解説しています。
http://php.net/manual/ja/json.constants.php
実際にjson_encode関数で値を連想配列をJSON形式の文字列に変換する方法を見ていきましょう。「json.php」ファイルを作成して、以下の処理を記述します。
<?php $value_array = ['value1'=>1, 'value2'=>2, 'value3'=>3, 'value4'=>4, 'value5'=>5]; //配列をJSON形式に変換 $jsonstr = json_encode($value_array); echo $jsonstr; ?>
json.phpをブラウザで実行すると、以下のように表示されます。
{"value1":1,"value2":2,"value3":3,"value4":4,"value5":5}
改行を指定する
JSONコードに改行やインデントを指定する場合は、json_encode関数の第二引数にJSON定数のJSON_PRETTY_PRINTを指定します。
<?php $value_array = ['value1'=>1, 'value2'=>2, 'value3'=>3, 'value4'=>4, 'value5'=>5]; //JSON_PRETTY_PRINTを指定して、改行とインデントを指定する $jsonstr = json_encode($value_array, JSON_PRETTY_PRINT); print_r($jsonstr); ?>
実行すると、以下のように表示されます。
{ "value1": 1, "value2": 2, "value3": 3, "value4": 4, "value5": 5 }
日本語で変換する方法
JSONは文字コードがUnicodeのため、日本語はUnicode文字に変換されてしまいます。例えば、以下のひらがなが含まれる配列をJSON形式に変換すると、「u3042u305fu30441〜」のような形式に変換されてしまいます。
$value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5];
{"u3042u305fu30441":1,"u3042u305fu30442":2,"u3042u305fu30443":3,"u3042u305fu30444":4,"u3042u305fu3044":5}
このように日本語をUnicode文字に変換すると、大変見づらくなるため、Unicodeに変換しないように指定する必要があります。そのためには、json_encode関数の第二引数にJSON定数のJSON_UNESCAPED_UNICODEを指定します。
JSON_UNESCAPED_UNICODEすれば、日本語はそのままでJSON形式に変換することが可能です。
<?php $value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5]; $jsonstr = json_encode($value_array, JSON_UNESCAPED_UNICODE); print_r($jsonstr); ?>
{"あたい1":1,"あたい2":2,"あたい3":3,"あたい4":4,"あたい":5}
JSON形式のデータを取得する方法
json_decodeの使い方
JSON形式でエンコードされたデータを、デコードしてPHPで扱える変数に変換するには、json_decode関数を使用します。json_decode関数は以下のように記述します。
json_decode ( string $JSON文字列 [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
以下にJSON形式のデータを取得してjson_decode関数でデコードする簡単なサンプルを紹介します。
Array ( [key1] => value1 [key2] => value2 [key3] => value3 )
json_decode関数の詳しい使い方については、以下の記事で詳しく解説しています!
まとめ
ここでは、PHPでJSON形式のデータを扱うために、
- JSONとは
- JSONのデータ構造について
- json_encodeを使用してJSON形式に変換する方法
- json_decodeを使用してデータを取得する方法
などについて解説しました。JSONという言葉を初めて聞いた方もいるかもしれませんが、データをさまざまな言語で共通して使用するためには、共通したフォーマットが必要です。
そのフォーマットの1つとしてJSON形式があるということを、覚えておいてください。もし、JSON形式のデータを扱う方法を忘れてしまったら、この記事を思い出してくださいね!