JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()
2017/05/14
JSON形式の値を PHPで配列に変換する処理
JSONとは?
JSONとは、「JavaScript Object Notation」の略で、XMLと同じくテキストベースのデータフォーマットです。
名前にある通り、構文は JavaScriptにおけるオブジェクトの表記法をベースにしていますが、JavaScript専用のデータフォーマットではなく、いろいろなサービスやプログラム間でのデータの受け渡しができるように設計されています。
Webサービスでの利用方法では、他サービスから APIを利用してデータを取得する場合のデータの受け取り方法として、JSON形式や XML形式でデータを受け渡しする場合が多々あります。
XMLに関しては「XML形式の値を配列形式に変換・PHPでは simplexml_load_string()」の記事を参照してください。
今回の記事では、JSON形式のデータを配列形式に変換するツール「JSONの値のデコードツール」の紹介と、ツールの処理に関する解説を行います。
JSON形式のデータのサンプル
この記事を書いていた時とほぼ同じタイミングで公開したツールに以下の 2つがあります。
2点間の直線距離計算ツール(地点1の緯度に基づき簡易計算)
路線・駅検索+駅からの距離検索
それぞれのツールに関する解説は以下の記事を参照してください。
路線・駅検索のために緯度経度からPHPで2点間の距離を計算する処理解説
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
このツールを作成する際に利用した「路線・駅」のデータ、および、APIには「駅データ.jp」を利用させていただいています。
「駅データ.jp」の APIを利用した場合、APIから戻ってくる路線や駅の情報は、JSON形式か、XML形式かのいずれかになります。
その「駅データ.jp」の「路線API」から「りんかい線」の路線情報を取得した JSONの値が下記の様になります。
|
1 |
{"line_cd":99337,"line_name":"りんかい線","line_lon":139.7661296428223,"line_lat":35.62373301157322,"line_zoom":13,"station_l":[{"station_cd":9933701,"station_g_cd":1132605,"station_name":"新木場","lon":139.827402,"lat":35.646172},{"station_cd":9933702,"station_g_cd":9933702,"station_name":"東雲","lon":139.804395,"lat":35.640987},{"station_cd":9933703,"station_g_cd":9933703,"station_name":"国際展示場","lon":139.791617,"lat":35.63441},{"station_cd":9933704,"station_g_cd":9933704,"station_name":"東京テレポート","lon":139.778896,"lat":35.62753},{"station_cd":9933705,"station_g_cd":9933602,"station_name":"天王洲アイル","lon":139.750793,"lat":35.620562},{"station_cd":9933706,"station_g_cd":9933706,"station_name":"品川シーサイド","lon":139.749549,"lat":35.608524},{"station_cd":9933707,"station_g_cd":1133228,"station_name":"大井町","lon":139.735025,"lat":35.607535},{"station_cd":9933708,"station_g_cd":1130201,"station_name":"大崎","lon":139.728439,"lat":35.619772}]} |
下記サイトから取得。
http://www.ekidata.jp/api/api_line.php
上記の情報が JSON形式のデータなのですが、APIに対して「『りんかい線』の路線情報をください」という指示を出すと、返ってくるデータです。
APIを利用する側のプログラムは、今回私が使用した PHPをはじめとして、Perl(CGI)、Python、Rubyなど様々です。
そのとき、何か特定の言語に依存する形で情報が戻ってくると、受け取る側のプログラムも限定してしまう可能性が出てきます。
そのため、どういう言語であっても支障なく情報のやりとりができるようにしたものが、テキストベースのデータフォーマットであり、その一つの形式が JSONということになります。
ぱっと見ただけでは分かりにくいのですが、それぞれに、「項目名と値」が対になって編集されています。
これが JSON形式のデータです。
これを受け取った後、PHPなら PHPで、そのプログラムで扱いやすいような配列などの形式に変換して使用するわけです。
「JSONってなに?」っていう事を検索してみてもイマイチなんだかよく分からない説明のサイトしかないのは、具体的な説明なしに理解することが難しいからでしょう。
「JSONの値のデコードツール」とは?
「JSONの値のデコードツール」は、入力された JSON形式のデータを配列形式に変換するツールです。
この記事は、この「JSONの値のデコードツール」を紹介する記事なのですが、「JSONの値のデコードツール」は、JSON形式のデータを配列形式に変換するだけの機能しかなく、非常に単純なツールです。
そもそもは、とある Webサービスの APIを利用した Webサービスを作成しているとき、APIから取得した JSONの値を確認するために作成したものでした。
非常に単純なものですが、せっかく作ったので、公開することにしたものです。
ちなみに、この時に利用していた Webサービスは「駅データ.jp」ではありませんが。
json_decode()、json_encode()で JSON形式をデコード、エンコード
JSON形式のデータを配列形式に変換することを「デコード」と言いますが、JSON形式のデコードには、「json_decode()」関数を使用します。
|
1 |
json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) |
第一引数に、JSON形式の値を編集します。
第二引数に、「false」 or 「true」を編集します。
「true」を編集すると、配列で出力することを目的にしていますので、「JSONの値のデコードツール」では「true」が指定してあります。
指定しない場合は、標準設定の「false」となり、オブジェクト形式で出力されます。
第三引数は、再帰の深さ。第四引数は、オプションで「JSON_BIGINT_AS_STRING」のみ指定できます。
この「JSONの値のデコードツール」は、入力チェックの処理などはありますが、基本的にこの「json_decode()」関数のみの処理になっています。
また、「json_encode()」関数は、「json_decode()」関数の逆で、配列やオブジェクトを JSON形式のデータに変換することができます。
|
1 |
json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) |
第一引数に、JSON形式にする値を編集します。UTF-8である必要があります。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
ob_start、ob_get_contents関数でPHPの標準出力をバッファリング・変数に代入
標準出力をバッファリングし変数に代入することができるob_start()関数の解説。include()の処理をバッファリングすることで自由な場所に処理を記述することが可能。
-
-
Phpmailerでスパム回避!Gmail等のSMTPを経由するPHPのメールフォーム解説
お問い合わせ等のメールフォームから送ったメールがスパム扱いされる!その対策としてライブラリ「Phpmailer」を使う方法を解説。関数化していますのでコピペでOK。
-
-
include、requireのパス指定をdirname(__FILE__)、__DIR__と書く理由
include、requireのパスの指定を dirname(__FILE__)、__DIR__で記述する理由に付いて解説。相対パス、絶対パスを直書き、パスを書かない場合は何が問題かを説明。
-
-
PHPで特定の日間の日付を for、strtotimeで表示する
ある特定の間の日付の情報を for文、strtotimeを使って作成し、その解説をしています。
-
-
指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い
文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。
-
-
cURLを利用する際の注意点「
&」があるURLは「”」で囲むcURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。
-
-
連想配列のキーも値もまとめてhtmlspecialchars()でサニタイズする関数の作成解説
PHPの配列・連想配列のキーと値をまとめてhtmlspecialchars()関数でサニタイズ(無害化、無毒化)を行う関数を作成。連想配列のキーはarray_map()関数でのサニタイズは無理。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
-
sleepの秒指定は整数のみなので1.5秒はsleep、usleepを組み合わせる
PHPのプログラム処理を遅延させる「sleep()」は整数秒単位。「usleep()」は1秒未満のマイクロ秒単位。では「1.5」秒はどう表現するのか。「sleep()」「usleep()」を組み合わせる。その解説。