今回はPHPで配列をJSONに変換して出力したり、JSONデータを読み込んで配列にする方法です。
JSONというのは、JavaScript Object Notationの略で、テキストのデータです。
といっても最近ではJavaScriptのためのデータではなく、PHPなどでも幅広く使われています。
JSONという形式はXMLに似ててXMLを簡易的にした感じです。(だと僕は思ってます。)
XMLはタグ(キー)と値の組み合わせで、PHPで言う連想配列の作りに当てはまります。
配列をCSVに出力する方法だと連想配列のキーが無くなってしまいます。
配列をDBやファイルに出力して保持したい場合に、キーも保持したいならJSONがいいですね。
PHPの連想配列をJSONデータに変換する方法
PHPの配列をJOSN形式のデータに変換するには json_encode() を使います。
$配列は、JSONに出力するデータです。連想配列も多次元配列も対応します。
$オプションは、出力形式などを指定できます。
戻り値は、JSON形式に変換されたデータが取得できます。
実際にJSON形式に変換してみましょう。
1 2 3 4 5 6 7 8 |
$ary = array( array('A', 23, '北海道,青森', '我輩は"猫"である。'), array('B', 23, '沖縄', "我輩は'猫'である。"), array('name' => 'C', 'age' => 23, 'from' => '東京,埼玉,千葉', "word" => 'ぼっちゃん'), ); $json = json_encode($ary); var_dump($json); |
これを実行すると、以下のように出力されます。
1 |
string(286) "[["A",23,"\u5317\u6d77\u9053,\u9752\u68ee","\u6211\u8f29\u306f\"\u732b\"\u3067\u3042\u308b\u3002"],["B",23,"\u6c96\u7e04","\u6211\u8f29\u306f'\u732b'\u3067\u3042\u308b\u3002"],{"name":"C","age":23,"from":"\u6771\u4eac,\u57fc\u7389,\u5343\u8449","word":"\u307c\u3063\u3061\u3083\u3093"}]" |
ぱっと見分かりにくいですが、日本語部分はユニコードに変換されてしまいます。
これでも問題無く、再度読み込んだときには見て読める日本語になります。
気になる方は、json_encodeの第2引数のオプションに JSON_UNESCAPED_UNICODE を指定すると日本語になります。
1 2 3 4 5 6 7 8 9 10 |
$ary = array( array('A', 23, '北海道,青森', '我輩は"猫"である。'), array('B', 23, '沖縄', "我輩は'猫'である。"), array('name' => 'C', 'age' => 23, 'from' => '東京,埼玉,千葉', "word" => 'ぼっちゃん'), ); $json = json_encode($ary, JSON_UNESCAPED_UNICODE); var_dump($json); //出力結果 //string(184) "[["A",23,"北海道,青森","我輩は\"猫\"である。"],["B",23,"沖縄","我輩は'猫'である。"],{"name":"C","age":23,"from":"東京,埼玉,千葉","word":"ぼっちゃん"}]" |
日本語で表示され見やすくなりました。
ダブルクォーテーションや文字列内のカンマなども正しく変換してくれています。
一応補足ですが、出力結果は通常は1行で出力されます。
これを階層構造で出力するためには JSON_PRETTY_PRINT もオプションに指定してやります。
日本語のオプションも同時に指定したい場合は | を区切りにして複数指定することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ary = array( array('A', 23, '北海道,青森', '我輩は"猫"である。'), array('B', 23, '沖縄', "我輩は'猫'である。"), array('name' => 'C', 'age' => 23, 'from' => '東京,埼玉,千葉', "word" => 'ぼっちゃん'), ); $json = json_encode($ary, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE); var_dump($json); // 出力結果 string(327) "[ [ "A", 23, "北海道,青森", "我輩は\"猫\"である。" ], [ "B", 23, "沖縄", "我輩は'猫'である。" ], { "name": "C", "age": 23, "from": "東京,埼玉,千葉", "word": "ぼっちゃん" } ]" |
次はこれを読み込んで元の連想配列を作成します。
JSONを読み込み連想配列にする方法
JSONデータを読み込み配列にするには、json_decode() を使います。
$JSONデータは、配列に変換する元のJSONデータです。
第2引数の true は、連想配列で返す場合に指定します。この指定が無いと、キーを持つデータはオブジェクトに変換されます。
戻り値の$配列は、変換後の配列です。
実際に動かしてみます。
JSONはテキストデータなので文字列で定義することができます。
今回は配列をJSONに変換し、そのJSONを再度配列に変換する流れで行います。
1 2 3 4 5 6 7 8 9 |
$ary = array( array('A', 23, '北海道,青森', '我輩は"猫"である。'), array('B', 23, '沖縄', "我輩は'猫'である。"), array('name' => 'C', 'age' => 23, 'from' => '東京,埼玉,千葉', "word" => 'ぼっちゃん'), ); $json = json_encode($ary, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE); $ary2 = json_decode($json, true); var_dump($ary2); |
実行結果は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
array(3) { [0]=> array(4) { [0]=> string(1) "A" [1]=> int(23) [2]=> string(16) "北海道,青森" [3]=> string(26) "我輩は"猫"である。" } [1]=> array(4) { [0]=> string(1) "B" [1]=> int(23) [2]=> string(6) "沖縄" [3]=> string(26) "我輩は'猫'である。" } [2]=> array(4) { ["name"]=> string(1) "C" ["age"]=> int(23) ["from"]=> string(20) "東京,埼玉,千葉" ["word"]=> string(15) "ぼっちゃん" } } |
ちゃんと値の中にカンマやダブルクォーテーションがある場合も、1つの配列の要素として処理できています。
連想配列でキーを持っていたものは、キーもちゃんと復元されています。
まとめ
配列をJSONに変換するにはjson_encode()を使う。
JSONを配列に変換するにはjson_decode()を使う。
json_encode()は、見て分かる日本語にするには、第2引数のオプションに JSON_UNESCAPED_UNICODE を設定する。
出力時に整形させたい場合は JSON_PRETTY_PRINT をオプションに指定する。
json_decode() は第2引数に true を指定しないと、キーを持つ要素がオブジェクト形式になってしまう。
true を指定すれば連想配列になる。
コメントを残す