JSONからPHP配列へ
JSONドキュメントを貼り付けると、.phpソースファイル用に整形されたPHP配列リテラルが得られます。短い配列構文([...])、適切なインデント、正しく引用符で囲まれた文字列、連想配列になるネストされたオブジェクト、そしてインデックスを保ったままの配列が特徴です。テストにAPIのフィクスチャを埋め込んだり、設定ファイルの初期値を用意したりするのに便利です。
JSONをPHPに変換する方法
-
1
JSONを貼り付ける
有効なJSONであれば何でも(オブジェクト、配列、深くネストされたものも)。
-
2
構文を選ぶ
短い`[...]`(PHP 5.4以降)または長い`array(...)`(現在はほとんど不要)。
-
3
文字列の引用符を選ぶ
シングルクォート(変数展開なし、アポストロフィはエスケープ)またはダブルクォート(`$`の変数展開が有効。データ用途では通常は不向き)。
-
4
配列をコピーする
`.php`ファイルに貼り付け、`return`に割り当てるか、`config([...])`で囲みます。
例
入力:
{ "app": { "name": "Hyperion", "debug": true, "hosts": ["h1.example.com", "h2.example.com"] } }
出力(短い構文、シングルクォート):
[
'app' => [
'name' => 'Hyperion',
'debug' => true,
'hosts' => [
'h1.example.com',
'h2.example.com',
],
],
]
型の対応
| JSON | PHP |
|---|---|
| 文字列 | 文字列(シングルクォート) |
| 整数 | int |
| 数値(小数) | float |
| 真偽値 | true / false |
| null | null |
| 配列(JSON) | インデックス配列 |
| オブジェクト(JSON) | 連想配列 |
連想配列とインデックス配列の使い分け
PHPには両方の振る舞いを持つ単一の配列型があります。一方、JSONはオブジェクトと配列を明確に区別するため、対応は次のとおりです。
{}→ 連想配列(['key' => value])。[]→ インデックス配列([value, value])。
ジェネレーターは常にこの区別を保持します。PHPでは両者を混在させることも可能ですが、混乱を招きます。
PHP特有の落とし穴
- 数値文字列のキー。 PHPは配列内の
"42"を整数キー42に変換します。JSONで数値文字列をキーとして使い、それを文字列のまま保持したい場合、array_combineによるラウンドトリップでは保持されません。 - 大きな整数。 JSONは32ビット環境の
PHP_INT_MAXを超える整数を保持できます。その可能性がある場合、ジェネレーターは警告します。 - UTF-8。 PHPの文字列はバイト列であり、ジェネレーターはUTF-8をそのまま出力します。
.phpファイルはBOMなしのUTF-8で保存してください。
使用例
- 設定ファイル:LaravelもSymfonyもPHP配列による設定を使います。ベンダー配布のJSON設定をそのまま取り込むのに適しています。
- テストフィクスチャ:
PHPUnitのフィクスチャは、実行時に読み込むJSONファイルよりも配列のほうが扱いやすくなります。 - シーダー:Laravelのデータベースシーダーは、JSONダンプから始めてPHP配列に変換することがよくあります。
よくある間違い
- PHP配列をJSONに戻す。
json_encodeは連想配列をオブジェクトとして、インデックス配列を配列として扱います。両者を混在させる(['key' => 'val', 0 => 'x'])と、出力はオブジェクトになります。JSON形式の配列はJSON形式のまま保ちましょう。 - アポストロフィを含むダブルクォート。 シングルクォートのPHP文字列は
\'をエスケープする必要があり、ダブルクォートの文字列は\\"をエスケープする必要があるうえ、注意しないと変数が意図せず展開されます。データにはシングルクォートを使いましょう。 - 末尾のカンマの付け忘れ。 PHPはPHP 7.3以降で末尾のカンマを許可しており、差分がきれいになります。ジェネレーターはデフォルトで付加します。
よくある質問
短い構文([...])はPHP 5.4以降で利用でき、現代のあらゆるコードで慣用的な選択肢です。長い構文(array(...))は、PHP 5.3以前で動作させる必要があるコード、つまり基本的にはレガシーシステムでのみ必要です。
はい。Laravelの設定ファイルは、ファイルから返される単純なPHP配列です。ジェネレーターの出力をreturnの後に貼り付け、config/に保存してください。
シングルクォートのPHP文字列は、変数やエスケープシーケンスを展開しません(\'と\\は例外)。データリテラルではこのほうが高速で安全です。ダブルクォートは、文字列内に\n、\t、$variableを入れたい場合にのみ意味を持ちます。
いいえ、出力するのは配列リテラルです。必要に応じてreturn、const、クラスのプロパティなどでご自身で囲んでください。出力を小さく保つことで組み合わせやすくなります。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
メールアドレス検証ツール
メールアドレスを検証します。RFC 5322構文チェック、MXレコードのライブ確認に加え、ローカル部、ドメイン、長さの詳細を表示します。メールは送信されません。
EditorConfig ジェネレーター
インデントのスタイルとサイズ、改行コード、文字コード、空白ルールを指定して .editorconfig ファイルを生成し、IDE やエディタをまたいで書式を統一できます。
このツールは他の言語でも利用できます
- JSON ke Array PHP [ID]
- JSON เป็น PHP Array [TH]
- JSON sang mảng PHP [VI]
- JSON zu PHP-Array [DE]
- JSON을 PHP 배열로 변환 [KO]
- JSON do tablicy PHP [PL]
- JSON para Array PHP [PT]
- JSON a Array de PHP [ES]
- JSON till PHP-array [SV]
- تحويل JSON إلى مصفوفة PHP [AR]
- JSON vers tableau PHP [FR]
- JSON naar PHP-array [NL]
- JSON в массив PHP [RU]
- JSON'dan PHP dizisine [TR]
- 从 JSON 到 PHP 数组 [ZH]
- JSON to PHP Array [EN]
- JSON in array PHP [IT]