初歩的な理解ながら、エラーで苦戦したJSONコードをPHPに変換するまでをまとめてみました。
同じ箇所で詰まっている人のヒントになれれば幸いです。
#実際のコードの書き方
以下が、PHP変換するまでの処理です。
今回は、「sample.json」というJSONコードで書かれたファイルを用い、
このデータをindex.phpに読み込んでいきます。
$filename = "http://sample.com/sample.json";
$file = file_get_contents($filename);
$prevention = mb_convert_encoding($file, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$json = json_decode($prevention, true);
それぞれを見ていきます。
###JSONコードの代入
$filename = "http://sample.com/sample.json";
ここでsample.jsonを”http://”を用いてhttp://sample.com/sample.json
として変数$filenameに代入します。
最初この代入をせずに
$file = file_get_contents(”sample.json”);
と、次のコードでsample.jsonを直接書いて見ましたがこれはできませんでした。
###file_get_contents関数とその代入
$file = file_get_contents($filename);
file_get_contents関数とは、ファイルの内容を全て文字列に読み込む関数です。
詳細:https://www.php.net/manual/ja/function.file-get-contents.php
この関数を用いて()内に先程の$filenameを入れsample.json内の内容を文字列化し、
さらにそれを変数$fileへ代入します。
###文字化けの防止
$prevention = mb_convert_encoding($file, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
JSONファイルを文字列に読み込んだ状態のみでは、場合によって文字化けを起こす危険があります。
その場合の変換する関数として、mb_convert_encoding()というのを使います。
これは()内にある、ASCII,JIS,UTF-8,EUC-JP,SJIS-WINの順番で自動検出し、UTF8に変換するということです。
その後、この処理を変数$preventionへ代入します。
###デコード
$json = json_decode($prevention, true);
json_decode関数を用いて変数$preventionを第一引数とし、デコードします。
デコードとは、エンコード(データを他の形式に書き込むこと)されたものを再び元の状態に戻すことを指します。
デコード内容を連想配列とする場合、第二引数ではtrueとします。
これで、JSONコードをPHPに変換するまでの処理は完了です。
これは自分が行った時の解決した方法であり深い理解まで至っていないため、
もし、これに説明不備・間違った解釈などありましたら、ご教授のほどお願いします。
#参考文献
https://qiita.com/fantm21/items/603cbabf2e78cb08133e
https://www.php.net/manual/ja/function.file-get-contents.php
https://www.php.net/manual/ja/function.json-decode.php