PHPで JSONデータをインデント付き書式で表示する

(1/1)
クラウドAPIの戻り値など、JSONデータを扱うケースが増えている。階層が深い JSONデータは、ダンプを見ただけでは構造が分かりにくい。そこで今回は、テキスト形式の JSONデータをインデント付きで、さらに属性を色分け表示する PHPプログラムを作ってみることにする。

目次

サンプル・プログラムの実行例

JSONデータをインデント付き書式で表示する

サンプル・プログラム

圧縮ファイルの内容
printJSON.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
printJSON.php 更新履歴
バージョン 更新日 内容
1.0.0 2025/03/30 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
1.8.1 2025/03/15 validRegexPattern() -- debug
1.8.0 2024/11/12 validRegexPattern() 追加
1.7.0 2024/10/09 validURL() validEmail() 追加
1.6.0 2024/10/07 isButton() -- buttonタグに対応
1.5.0 2024/01/28 exitIfExceedVersion() 追加

準備:初期値など

printJSON.php

  52: // 初期値(START) =============================================================
  53: // 表示幅(ピクセル)
  54: define('WIDTH', 600);
  55: 
  56: // 配色
  57: // キー
  58: define('COLOR_KEY', '#008000');
  59: // 文字列
  60: define('COLOR_STRING', '#FF4500');
  61: // 数値
  62: define('COLOR_NUMBER', '#0000FF');
  63: 
  64: // JSONデータの初期値
  65: define('DEF_JSON', '{ "name": "papa_pahoo", "id": "123456", "rank": 29, "createdAt": "2024-03-29T11:00:28+09:00", "contactdetails": { "phone": "0123456789", "email":"test@pahoo.org" } }');
  66: 
  67: // 初期値(END) ===============================================================

各種定数は変更可能である。
データ入力に関わる関数群 "pahooInputData.php" はinclude_pathが通ったディレクトリに配置すること。

解説:JSONデータを整形して色分けする

printJSON.php

 176: /**
 177:  * JSONデータを整形して色分けする
 178:  * @param   array $json  元のJSONデータ(連想配列)
 179:  * @return  string 整形後のJSONデータ
 180: */
 181: function sprintJSON($json) {
 182:     $pretty = json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
 183: 
 184:     // 整形する
 185:     // キー
 186:     $pretty = preg_replace('/"(.*?)":/u', '<span style="color:' . COLOR_KEY . ';">"$1"</span>:', $pretty);
 187:     // 文字列
 188:     $pretty = preg_replace('/:\s*"(.*?)"/u', ': <span style="color:' . COLOR_STRING . ';">"$1"</span>', $pretty);
 189:     // 配列の1要素の文字列
 190:     $pretty = preg_replace('/\[(\s*)"(.*?)"\s*\]/us', '[$1<span style="color:' . COLOR_STRING . ';">"$2"</span> ]', $pretty);
 191:     // 配列内の文字列(複数要素対応)
 192:     $json = preg_replace('/"(.*?)"(,?)/u', '<span style="color:' . COLOR_STRING . ';">"$1"</span>$2', $pretty);
 193:     // 数値
 194:     $pretty = preg_replace('/:\s+([-0-9.]+)/u', ': <span style="color:' . COLOR_NUMBER . ';">$1</span>', $pretty);
 195: 
 196:     $pretty =<<< EOT
 197: <pre id ="pretty" name ="pretty">
 198: {$pretty}
 199: </pre>
 200: 
 201: EOT;
 202: 
 203:     return $pretty;
 204: }

ユーザー定義関数 sprintJSON は、PHPで扱う連想配列形式の JSONデータを受け取り、インデント整形して色分けした結果の文字列を返す。

JSONデータをインデント付きの文字列に整形するには、組み込み関数  json_encode  の第2引数にフラグ JSON_PRETTY_PRINT を指定すればよい。さらに、UTF-8文字をエスケープしないよう、フラグ JSON_UNESCAPED_UNICODE を追加した。

JSONデータのキー、文字列、数値の属性に応じて色分けするには、正規表現による文字列置換を行い、HTMLタグで色分けした。

UIについて

UI部分にJavaScriptを用いている。
ファイルのドロップは「解説:ファイルのドロップ - PHPで撮影場所をマッピング」を、クリップボードへのコピーは、「JavaScriptでクリップボードを使う」を、それぞれご覧いただきたい。

参考サイト

(この項おわり)
header