PHPでjsonを読み込み、出力する方法
20/01/11 17:17:53 20/01/21 22:59:00
JSONはJavaScript Object Notationの略で、JavaScriptで書かれたデータ形式です。JavaScriptで書かれているのですが、PHPでも使用できます。
読み込むことも出力することも可能なので、その方法について解説していきます。
JSONとは
JSONの概要は上記の通りですが、問題は具体的にどのような内容になっているのかです。そこで、まずはサンプルを紹介します。
{ "身長": "170cm", "体重": "80kg", "足のサイズ": "27cm", "服のサイズ": "L~XL" }
このように、{}で囲み、キーと値をセットで記述しています。JSONと言うとなんとなく大げさで難しそうな感じがしますが、実際のデータ構造は至ってシンプルです。
また、一つのキーに対して複数の値を設定することも可能です。
{ "身長": "160cm", "170cm", "180cm" }
JSONを読み込む
JSON形式のデータを取得するには、json_decode関数を使用します。この関数はPHPのコードになります。json_decode関数の構文は以下です。
json_decode ( string $JSON文字列 [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
json_decode関数を使用したサンプルコードは以下です。
//配列を作成 $key_value_array = ['key1'=>'value1', 'key2'=>'value2', 'key3'=>'value3' ]; //配列をJSON形式に変換 $jsonstr = json_encode($key_value_array); //JSON形式のデータをデコードする $key_value = json_decode($jsonstr, true); print_r($key_value);
このコードを実行すると以下のようになります。
Array ( [key1] => value1 [key2] => value2 [key3] => value3 )
JSON形式だったデータが、普通のPHPの配列に変換されました。
JSON形式に変換して出力する方法
次に、逆にデータをJSON形式に変換して出力する方法です。JSON形式に変換するには、json_encode関数を使用します。
上でJSON形式からPHPの配列形式に変換するにはjson_encode関数を使用すると説明しましたが、PHPの配列形式からJSON形式に変換する際はjson_encode関数を使用します。
json_encode関数の構文は以下です。
string json_encode( $値 [, JSON定数 [, 深さ = 512 ]] )
この構文を使用したサンプルコードは以下です。
<?php $value_array = ['value1'=>1, 'value2'=>2, 'value3'=>3, 'value4'=>4, 'value5'=>5]; //配列をJSON形式に変換 $jsonstr = json_encode($value_array); echo $jsonstr; ?>
このコードを実行すると、以下のように出力されます。
{“value1″:1,”value2″:2,”value3″:3,”value4″:4,”value5”:5}
値とキーがセットになっている、JSON形式に変換されました。またこのサンプルコードではキーと値がすべて一列になって出力されましたが、改行を指定して出力することもできます。サンプルコードは以下です。
<?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形式に変換する
JSONはコードの指定ができるので、日本語をJSONに変換することも可能です。そのためにはjson_encode関数の第二引数に「JSON_UNESCAPED_UNICODE」を指定します。
サンプルコードは以下です。
<?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_encode関数の第二引数を指定しないと以下のようになります。
$value_array = ['あたい1'=>1, 'あたい2'=>2, 'あたい3'=>3, 'あたい4'=>4, 'あたい'=>5];
これを出力した場合が以下です。
{“\u3042\u305f\u30441″:1,”\u3042\u305f\u30442″:2,”\u3042\u305f\u30443″:3,”\u3042\u305f\u30444″:4,”\u3042\u305f\u3044”:5}
JSONはデフォルトではUnicodeに変換される仕様になっているので、日本語をUnicodeに変換した文字列が出力されました。Unicodeだとデータの中身がなんなのかよくわかりません。
JSON形式のデータを送信する
JSON形式への変換、JSON形式からの変換方法について解説してきましたが、最後にJSON形式のデータを送信する方法を紹介します。POSTで送信するサンプルコードは以下です。
//配列を作成 $alphabet_array = ['a'=>'alphabet1', 'b'=>'alphabet2', 'c'=>'alphabet3', 'd'=>'alphabet4', 'e'=>'alphabet5' ]; //配列をJSON形式に変換 $jsonstr = json_encode($alphabet_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);
以上のように、PHPではJSONの読み込み、出力、送信が可能です。
人気記事