Wprowadzenie
Może się zdarzyć, że podczas tworzenia aplikacji Laravel będziesz musiał odczytać plik JSON.
Często zdarzało mi się, że muszę to zrobić, gdy piszę testy integracji API i chcę przeczytać fikcyjną odpowiedź, którą wcześniej zapisałem w pliku JSON. Musiałem to również zrobić, gdy pracowałem z usługami innych firm (takimi jak Firebase), które udostępniają plik JSON, który można przekazać do zestawu SDK w celu uwierzytelnienia.
W tym artykule Quickfire szybko omówimy, jak korzystać z nowej File::json
metody, która została dodana w Laravel 10.4 przez Austina White'a w PR # 46481. Omówimy również, jak korzystać z podobnej Storage::json
metody, która została dodana w Laravel 10.5 przez lorenzolosa w PR # 46548.
Następnie szybko porównamy różnice między tymi dwiema metodami i sposoby poprawy obsługi błędów.
Odczytywanie plików JSON za pomocą fasady
"Plik" Metoda File::json
jest prostym opakowaniem wokół json_decode
funkcji i File::get
metody. Umożliwia odczyt pliku JSON z lokalnego systemu plików i zwrócenie zawartości jako tablicy.
Wcześniej, jeśli chciałeś odczytać plik JSON w aplikacji Laravel, możesz zrobić coś takiego:
$contents = File::get(base_path('path/to/file.json'));
$json = json_decode($contents);
Zakładając, że plik JSON jest prawidłowy, zmienna $json
będzie teraz tablicą zawierającą zawartość pliku JSON.
Załóżmy na przykład, że plik JSON zawiera następujące dane:Zmienna $json
będzie teraz zawierać następujące dane tablicowe:Możemy osiągnąć dokładnie to samo zachowanie, używając nowej File::json
metody w następujący sposób:
{
"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'));
Chociaż jest to niewielka zmiana, bardzo mi się podoba!
Jestem wielkim fanem prób uczynienia mojego kodu czytanym tak blisko zwykłego angielskiego, jak to tylko możliwe, i czuję, że ta metoda pomaga w tym. Ilekroć piszę jakiś kod, staram się myśleć sobie: "Czy junior dołączający do zespołu byłby w stanie zrozumieć, co się dzieje?".
Oczywiście ta jedna mała zmiana nie sprawi, że twój kod będzie magicznie czytelny dla wszystkich, ale myślę, że to małe zmiany, takie jak te, dają marginalne zyski w czasie.
Odczytywanie plików JSON za pomocą fasady
"Storage" Podobnie jak File::json
metoda, Laravel ma również metodęStorage::json
, której można użyć do odczytu plików JSON.
File::json
Podczas gdy metoda może być używana do odczytu plików JSON z dowolnego miejsca w lokalnym systemie plików, Storage::json
metoda może być używana do odczytu plików z dysku pamięci masowej aplikacji. W rezultacie oznacza to, że możesz używać Storage::json
do odczytu plików z zasobnika AWS S3, Digital Ocean Spaces i tak dalej.
Możesz wywołać metodę dokładnie w taki sam sposób, jak metodaFile::json
:
$json = Storage::json('path/to/file.json');
Obsługa błędów
różnych zachowań dla nieistniejących plików
W chwili pisania tego artykułu ważne jest, aby pamiętać, że File::json
i Storage::json
mają nieco inne zachowanie, jeśli chodzi o radzenie sobie z nieistniejącymi plikami.
Jeśli spróbujesz odczytać nieistniejący plik za pomocą tej File::json
metody, zgłosi Illuminate\Contracts\Filesystem\FileNotFoundException
wyjątek. Jeśli jednak spróbujesz odczytać nieistniejący plik za pomocą tej Storage::json
metody, zwróci null
on plik .
Jest to coś, o czym należy pamiętać podczas korzystania z tych metod i podejmowania decyzji o najlepszym podejściu do obsługi błędów.
Odczytywanie nieprawidłowych plików
JSON Przed próbą użycia pliku JSON należy zawsze pamiętać o sprawdzeniu poprawności zawartości pliku JSON.
Załóżmy, że masz następujący nieprawidłowy plik JSON (który ma końcowy przecinek w przedostatnim wierszu, aby spowodować błąd):
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
}
Jeśli spróbujesz użyć Storage::json
lub File::json
odczytać ten plik, obie te metody zwrócą null
. Dzieje się tak, ponieważ funkcja powrócinull
, json_decode
jeśli nie będzie w stanie zdekodować ciągu JSON.
Wynika to z faktu, że podstawowa json_decode
metoda używa 0
(JSON_ERROR_NONE
) jako domyślnej flagi, co oznacza, że po cichu zawiedzie, jeśli napotka błąd.
Zazwyczaj wolę wyjątek, jeśli wystąpi błąd, więc jestem zmuszony sobie z nim poradzić. Gwarantuje, że nie będę używać nieprawidłowych danych w mojej aplikacji i może powiadomić mnie o moim oprogramowaniu do śledzenia błędów, aby móc rozwiązać problem. Aby to zrobić, możesz przekazać flagę JSON_THROW_ON_ERROR
do metod takich jak so:
$json = Storage::json('path/to/file.json', JSON_THROW_ON_ERROR);
$json = File::json('path/to/file.json', JSON_THROW_ON_ERROR);
Now, jeśli którakolwiek z tych metod nie jest w stanie zdekodować ciągu JSON, zostanie wygenerowanyJsonException
.
Mamy
nadzieję, że ten artykuł Quickfire powinien dać ci szybki wgląd w to, jak możesz korzystać z nowych File::json
metod Storage::json
odczytu plików JSON w Laravel.
Jeśli podobał Ci się ten post, chciałbym o tym usłyszeć. Podobnie, jeśli masz jakieś opinie, aby ulepszyć przyszłe, chciałbym to również usłyszeć.
Możesz być także zainteresowany sprawdzeniem mojego 220+ stronicowego ebooka "Battle Ready Laravel", który obejmuje podobne tematy bardziej szczegółowo.
Jeśli jesteś zainteresowany otrzymywaniem aktualizacji za każdym razem, gdy publikuję nowy post, zapisz się do mojego biuletynu poniżej.
Buduj niesamowite rzeczy! 🚀