JSON do tablicy PHP

Wklej dokument JSON i otrzymaj literał tablicy PHP sformatowany dla pliku źródłowego .php: skrócona składnia tablic ([...]), poprawne wcięcia, poprawnie cytowane ciągi znaków, zagnieżdżone obiekty stają się tablicami asocjacyjnymi, a tablice pozostają indeksowane. Przydatne do osadzania fikstur API w testach lub do wypełniania plików konfiguracyjnych.

Jak przekształcić JSON w PHP

  1. 1

    Wklej JSON

    Dowolny prawidłowy JSON: obiekty, tablice, głęboko zagnieżdżone.

  2. 2

    Wybierz składnię

    Krótka `[...]` (PHP 5.4+) lub długa `array(...)` (obecnie rzadko potrzebna).

  3. 3

    Wybierz rodzaj cudzysłowów dla ciągów

    Pojedyncze cudzysłowy (bez interpolacji, apostrofy są ekranowane) lub podwójne cudzysłowy (umożliwiają interpolację `$`: zwykle nie jest to pożądane w przypadku danych).

  4. 4

    Skopiuj tablicę

    Wklej do pliku `.php`, przypisz do `return` lub opakuj w `config([...])`.

Przykład

Wejście:

{ "app": { "name": "Hyperion", "debug": true, "hosts": ["h1.example.com", "h2.example.com"] } }

Wynik (skrócona składnia, pojedyncze cudzysłowy):

[
    'app' => [
        'name' => 'Hyperion',
        'debug' => true,
        'hosts' => [
            'h1.example.com',
            'h2.example.com',
        ],
    ],
]

Mapowanie typów

JSON PHP
ciąg znaków ciąg znaków (pojedyncze cudzysłowy)
liczba całkowita int
liczba (dziesiętna) float
wartość logiczna true / false
null null
tablica (JSON) tablica indeksowana
obiekt (JSON) tablica asocjacyjna

Kiedy używać tablic asocjacyjnych, a kiedy indeksowanych

PHP ma jeden typ tablicy o obu zachowaniach. JSON wyraźnie rozróżnia obiekt i tablicę, więc mapowanie jest następujące:

  • {} → tablica asocjacyjna (['key' => value]).
  • [] → tablica indeksowana ([value, value]).

Generator zawsze zachowuje to rozróżnienie; mieszanie obu w PHP jest dozwolone, ale mylące.

Pułapki charakterystyczne dla PHP

  • Klucze będące ciągami liczbowymi. PHP rzutuje "42" na całkowity klucz 42 w tablicy. Jeśli Twój JSON używa ciągów liczbowych jako kluczy i potrzebujesz ich jako ciągów, konwersja w obie strony przez array_combine ich nie zachowa.
  • Duże liczby całkowite. JSON może zawierać liczby całkowite większe niż PHP_INT_MAX w kompilacjach 32-bitowych. Generator ostrzega, gdy może się to zdarzyć.
  • UTF-8. Ciągi znaków w PHP to sekwencje bajtów; generator wypisuje UTF-8 dosłownie. Upewnij się, że plik .php jest zapisany jako UTF-8 bez BOM.

Przykłady zastosowań

  • Pliki konfiguracyjne. Zarówno Laravel, jak i Symfony korzystają z konfiguracji w postaci tablic PHP. Przeniesienie konfiguracji z JSON w stylu dostawcy sprawdza się dobrze.
  • Fikstury testowe. Fikstury PHPUnit są czytelniejsze jako tablice niż jako pliki JSON ładowane w czasie wykonywania.
  • Seedery. Seedery baz danych w Laravel często zaczynają się jako zrzut JSON i stają się tablicami PHP.

Częste błędy

  • Konwersja tablic PHP z powrotem do JSON. json_encode traktuje tablicę asocjacyjną jako obiekt, a indeksowaną jako tablicę. Jeśli je pomieszasz (['key' => 'val', 0 => 'x']), na wyjściu otrzymasz obiekt. Trzymaj tablice o kształcie JSON w kształcie JSON.
  • Podwójne cudzysłowy z apostrofami. Ciągi PHP w pojedynczych cudzysłowach wymagają ekranowania \'; ciągi w podwójnych cudzysłowach wymagają ekranowania \\", a zmienne mogą zostać przypadkowo zinterpolowane, jeśli nie zachowasz ostrożności. W przypadku danych używaj pojedynczych cudzysłowów.
  • Zapominanie o końcowych przecinkach. PHP dopuszcza je od PHP 7.3 i sprawiają, że różnice (diff) są czytelniejsze. Generator dodaje je domyślnie.

Najczęściej zadawane pytania

Krótka składnia ([...]) jest dostępna od PHP 5.4 i stanowi idiomatyczny wybór dla całego nowoczesnego kodu. Długa składnia (array(...)) jest potrzebna tylko dla kodu, który musi działać na PHP 5.3 lub starszym, czyli w systemach przestarzałych.

Tak. Pliki konfiguracyjne Laravel to zwykłe tablice PHP zwracane z pliku. Wklej wynik generatora po return i zapisz go w katalogu config/.

Ciągi PHP w pojedynczych cudzysłowach nie interpolują zmiennych ani sekwencji ucieczki (poza \' i \\). W przypadku literałów danych jest to szybsze i bezpieczniejsze. Podwójne cudzysłowy mają znaczenie tylko wtedy, gdy chcesz umieścić w ciągu \n, \t lub $variable.

Nie, generuje literał tablicy. W razie potrzeby opakuj go samodzielnie w return, const lub właściwość klasy. Utrzymywanie małego rozmiaru wyniku ułatwia jego komponowanie.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach