JSON naar PHP-array

Plak een JSON-document en krijg een PHP-array-literal die is opgemaakt voor een .php-bronbestand: korte array-syntaxis ([...]), correcte inspringing, correct aangehaalde strings, geneste objecten die associatieve arrays worden en arrays die geïndexeerd blijven. Handig om API-fixtures in tests in te bedden of om configuratiebestanden te vullen.

JSON naar PHP omzetten

  1. 1

    Plak de JSON

    Elke geldige JSON: objecten, arrays, diep genest.

  2. 2

    Kies de syntaxis

    Kort `[...]` (PHP 5.4+) of lang `array(...)` (nu zelden nodig).

  3. 3

    Kies de aanhalingstekens voor strings

    Enkele aanhalingstekens (geen interpolatie, apostroffen escapen) of dubbele aanhalingstekens (staan `$`-interpolatie toe: meestal niet wat je voor data wilt).

  4. 4

    Kopieer de array

    Plak het in je `.php`-bestand, wijs het toe aan een `return` of verpak het in `config([...])`.

Voorbeeld

Invoer:

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

Uitvoer (korte syntaxis, enkele aanhalingstekens):

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

Typetoewijzing

JSON PHP
string string (enkele aanhalingstekens)
geheel getal int
getal (decimaal) float
boolean true / false
null null
array (JSON) geïndexeerde array
object (JSON) associatieve array

Wanneer associatief versus geïndexeerd gebruiken

PHP heeft één arraytype met beide gedragingen. JSON maakt duidelijk onderscheid tussen object en array, dus de toewijzing is:

  • {} → associatief (['key' => value]).
  • [] → geïndexeerd ([value, value]).

De generator behoudt altijd het onderscheid; de twee in PHP mengen mag, maar is verwarrend.

PHP-specifieke valkuilen

  • Numerieke string-sleutels. PHP zet "42" om naar de gehele sleutel 42 in een array. Als je JSON numerieke strings als sleutels gebruikt en je ze als strings nodig hebt, bewaart de heen-en-weerconversie via array_combine ze niet.
  • Grote gehele getallen. JSON kan gehele getallen bevatten die groter zijn dan PHP_INT_MAX op 32-bits builds. De generator waarschuwt wanneer dat kan gebeuren.
  • UTF-8. PHP-strings zijn bytereeksen; de generator geeft UTF-8 letterlijk uit. Zorg dat je .php-bestand als UTF-8 zonder BOM is opgeslagen.

Toepassingen

  • Configuratiebestanden. Zowel Laravel als Symfony gebruiken PHP-array-configuratie. Een JSON-configuratie in vendor-stijl overnemen werkt goed.
  • Testfixtures. PHPUnit-fixtures zijn als arrays overzichtelijker dan als JSON-bestanden die tijdens runtime worden geladen.
  • Seeders. Database-seeders in Laravel beginnen vaak als een JSON-dump en worden PHP-arrays.

Veelgemaakte fouten

  • PHP-arrays terug omzetten naar JSON. json_encode behandelt een associatieve array als een object en een geïndexeerde array als een array. Als je ze mengt (['key' => 'val', 0 => 'x']), krijg je bij de uitvoer een object. Houd JSON-vormige arrays JSON-vormig.
  • Dubbele aanhalingstekens met apostroffen. PHP-strings met enkele aanhalingstekens moeten \' escapen; strings met dubbele aanhalingstekens moeten \\" escapen, en variabelen worden per ongeluk geïnterpoleerd als je niet oplet. Gebruik enkele aanhalingstekens voor data.
  • Afsluitende komma’s vergeten. PHP staat ze toe sinds PHP 7.3 en ze maken diffs schoner. De generator voegt ze standaard toe.

Veelgestelde vragen

De korte syntaxis ([...]) is beschikbaar sinds PHP 5.4 en is de idiomatische keuze voor alle moderne code. De lange syntaxis (array(...)) is alleen nodig voor code die op PHP 5.3 of ouder moet draaien, in wezen legacy-systemen.

Ja. Laravel-configuratiebestanden zijn gewone PHP-arrays die uit een bestand worden geretourneerd. Plak de uitvoer van de generator na return en sla die op in config/.

PHP-strings met enkele aanhalingstekens interpoleren geen variabelen of escape-reeksen (behalve \' en \\). Voor dataliterals is dat sneller en veiliger. Dubbele aanhalingstekens zijn alleen van belang wanneer je \n, \t of $variable in de string wilt.

Nee, het geeft een array-literal uit. Verpak het zelf met return, const of een klasse-eigenschap indien nodig. De uitvoer klein houden maakt die goed samen te stellen.

Gerelateerde tools

Tool beschikbaar in andere talen