Вступ
Можуть бути випадки, коли ви створюєте свою програму Laravel, що вам потрібно прочитати файл JSON.
Мені часто потрібно це робити, коли я пишу тести для інтеграції API і хочу прочитати фіктивну відповідь, яку я раніше зберіг у файлі JSON. Мені також потрібно було це зробити, коли я працюю зі сторонніми службами (наприклад, Firebase), які надають файл JSON для переходу в SDK для автентифікації.
У цій статті Quickfire ми швидко розглянемо, як використовувати новий File::json
метод, який був доданий у Laravel 10.4 Остіном Уайтом у PR #46481. Ми також розглянемо, як використовувати подібний Storage::json
метод, який був доданий в Laravel 10.5 lorenzolosa в PR #46548.
Потім ми швидко порівняємо відмінності між цими двома методами та способи покращення обробки помилок.
Читання JSON файлів за допомогою фасаду
"Файл" Метод File::json
являє собою просту обгортку навколо json_decode
функції та File::get
методу. Це дозволяє прочитати файл JSON з локальної файлової системи та повернути вміст масиву.
Раніше, якщо ви хотіли прочитати файл JSON у своєму додатку Laravel, ви могли зробити щось на зразок цього:
$contents = File::get(base_path('path/to/file.json'));
$json = json_decode($contents);
Припускаючи, що файл JSON дійсний, $json
змінною тепер буде масив, що містить вміст файлу JSON.
Наприклад, скажімо, файл JSON містив такі дані:Змінна $json
тепер міститиме такі дані масиву:Ми можемо досягти точно такої ж поведінки, використовуючи новий File::json
метод, як так:
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
]
}
[
'name' => 'laravel/laravel',
'type' => 'project',
'description' => 'The Laravel Framework.',
'keywords' => [
'framework',
'laravel',
],
]
Хоча
$json = File::json(base_path('path/to/file.json'));
це невелика зміна, мені це дуже подобається!
Я великий шанувальник спроб зробити так, щоб мій код читався якомога ближче до простої англійської мови, і я відчуваю, що цей метод допомагає в цьому. Кожного разу, коли я пишу будь-який код, я намагаюся і думаю про себе: «Чи зможе молодший, який приєднається до команди, зрозуміти, що відбувається?».
Звичайно, ця одна невелика зміна не зробить ваш код чарівним чином читабельним для всіх, але я думаю, що такі невеликі зміни з часом дають вам незначний прибуток.
Читання файлів JSON за допомогою фасаду
"Сховище" Подібно до методуFile::json
, Laravel також має Storage::json
метод, який можна використовувати для читання файлів JSON.
У той час як File::json
метод можна використовувати для читання файлів JSON з будь-якого місця вашої локальної файлової системи, метод Storage::json
можна використовувати для читання файлів з диска зберігання вашої програми. В результаті це означає, що ви можете використовувати Storage::json
для читання файлів з сегмента AWS S3, Digital Ocean Spaces тощо.
Ви можете викликати метод точно так само, як метод:File::json
$json = Storage::json('path/to/file.json');
Обробка помилок
різної поведінки для неіснуючих файлів
На момент написання цієї статті важливо відзначити, що File::json
і Storage::json
мають дещо іншу поведінку, коли справа доходить до роботи з неіснуючими файлами.
Якщо спробувати прочитати неіснуючий файл методомFile::json
, він викине винятокIlluminate\Contracts\Filesystem\FileNotFoundException
. Однак, якщо спробувати прочитати неіснуючий файл методомStorage::json
, він повернеться null
.
Це те, що вам потрібно пам'ятати, використовуючи ці методи та вирішуючи найкращий підхід до обробки помилок.
Читання недійсних файлів
JSON Ви завжди повинні пам'ятати про перевірку вмісту файлу JSON, перш ніж намагатися використовувати його.
Скажімо, у вас є такий неприпустимий файл JSON (який має кінцеву кому в рядку від другого до останнього, щоб спричинити помилку):Якщо
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
}
ви спробували використати Storage::json
або File::json
прочитати цей файл, обидва ці методи повернуться null
. Це пов'язано з тим, що функція повернеться, json_decode
якщо їй не вдасться null
декодувати рядок JSON.
Це пов'язано з тим, що базовий json_decode
метод використовує 0
(JSON_ERROR_NONE
) як прапорець за замовчуванням, що означає, що він мовчки вийде з ладу, якщо зіткнеться з помилкою.
Як правило, я вважаю за краще, щоб виняток був кинутий, якщо є помилка, щоб я був змушений впоратися з ним. Це гарантує, що я не буду використовувати недійсні дані у своїй програмі та може попередити мене про моє програмне забезпечення для відстеження помилок, щоб я міг вирішити проблему. Для цього ви можете передати прапорець JSON_THROW_ON_ERROR
таким методам:
$json = Storage::json('path/to/file.json', JSON_THROW_ON_ERROR);
$json = File::json('path/to/file.json', JSON_THROW_ON_ERROR);
Тепер, якщо будь-який з цих методів не може розшифрувати рядок JSON, буде кинуто aJsonException
.
висновок
Сподіваємось, ця стаття Quickfire повинна була дати вам швидке уявлення про те, як ви можете використовувати нові File::json
та Storage::json
методи читання файлів JSON у Laravel.
Якщо вам сподобалося читати цю публікацію, я хотів би почути про неї. Так само, якщо у вас є якісь відгуки щодо покращення майбутніх, я також хотів би почути це.
Можливо, вам також буде цікаво переглянути мою електронну книгу на 220+ сторінок "Battle Ready Laravel", яка більш глибоко охоплює подібні теми.
Якщо ви зацікавлені в оновленні кожного разу, коли я публікую новий пост, не соромтеся підписатися на мій інформаційний бюлетень нижче.
Продовжуйте створювати чудові речі! 🚀