JSON (JavaScript Object Notation) is het standaard dataformaat voor communicatie tussen systemen, zoals een PHP-backend en een JavaScript-frontend, of tussen twee API's. JSON ziet eruit als een combinatie van associatieve arrays en gewone arrays.
<?php
// Dit is een JSON-string:
$json = '{"naam": "Jan", "leeftijd": 25, "student": true}';
?>
PHP biedt twee functies om met JSON te werken:
json_encode() — PHP-data omzetten naar een JSON-stringjson_decode() — een JSON-string omzetten naar PHP-dataLet op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.
Met json_encode() zet je arrays en andere PHP-waarden om naar een JSON-string. Associatieve arrays worden JSON-objecten, gewone arrays worden JSON-arrays.
<?php
$persoon = ["naam" => "Jan", "leeftijd" => 25];
$json = json_encode($persoon);
echo $json; // {"naam":"Jan","leeftijd":25}
?>
Maak een associatieve array $product met de sleutels "naam" (waarde "Laptop"), "prijs" (waarde 999.99) en "voorraad" (waarde 5). Zet deze om naar JSON met json_encode() en toon het resultaat.
Maak een array $kleuren met de waarden "rood", "groen" en "blauw". Zet deze om naar JSON en toon het resultaat.
Maak een geneste structuur: een associatieve array $leerling met "naam" ("Eva"), "leeftijd" (16), en "vakken" (een array met "PHP", "HTML", "CSS"). Zet om naar JSON en toon het resultaat.
Maak een array met twee producten (associatieve arrays). Product 1: naam "Muis", prijs 25. Product 2: naam "Toetsenbord", prijs 45. Gebruik json_encode() met de vlag JSON_PRETTY_PRINT als tweede parameter en toon het resultaat.
Met json_decode() zet je een JSON-string om naar PHP-data. Standaard krijg je een object terug. Met true als tweede parameter krijg je een associatieve array.
<?php
$json = '{"naam": "Jan", "leeftijd": 25}';
// Als object
$obj = json_decode($json);
echo $obj->naam; // Jan
// Als associatieve array
$arr = json_decode($json, true);
echo $arr['naam']; // Jan
?>
Gebruik json_decode($json, true) als je met arrays wilt werken (wat meestal handiger is in PHP). Zonder true krijg je een object met pijlnotatie (->).
Decodeer de JSON-string '{"stad": "Amsterdam", "land": "Nederland"}' naar een associatieve array. Toon de waarde van "stad".
Decodeer de JSON-string '[{"naam": "PHP"}, {"naam": "Python"}, {"naam": "Java"}]' naar een array. Loop met foreach door de resultaten en toon elke naam op een nieuwe regel (<br>).
Schrijf een functie haalWaarde($json, $sleutel) die een JSON-string decodeert en de waarde van de opgegeven sleutel teruggeeft. Als de sleutel niet bestaat, return "Niet gevonden". Test met '{"kleur": "blauw", "maat": "L"}' en sleutel "maat".
Decodeer de JSON-string '{"leerlingen": [{"naam": "Jan", "cijfer": 8}, {"naam": "Eva", "cijfer": 9}, {"naam": "Piet", "cijfer": 6}]}'. Loop door de leerlingen en toon alleen de namen van leerlingen met een cijfer hoger dan 7, elk op een nieuwe regel (<br>).
Het is belangrijk om te controleren of JSON-bewerkingen slagen. json_decode() geeft null terug bij ongeldige JSON. Met json_last_error() kun je controleren of er een fout was.
<?php
$json = "ongeldige json";
$data = json_decode($json, true);
if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
echo "JSON-fout: " . json_last_error_msg();
}
?>
Schrijf een functie veiligDecode($json) die probeert JSON te decoderen. Als het lukt, return de data als associatieve array. Als het mislukt, return een array met één sleutel "fout" en de waarde van json_last_error_msg(). Test met de ongeldige JSON-string "dit is geen json".
Schrijf een functie jsonNaarLijst($json) die een JSON-array decodeert en de items als genummerde lijst toont ("1. item<br>"). Als de JSON ongeldig is, toon "Ongeldige JSON". Test met '["Appel", "Peer", "Banaan"]'.
Bouw een compleet systeem. Maak een array $winkelwagen met drie producten (elk met "naam" en "prijs"). Zet deze om naar JSON en sla op in $json. Decodeer daarna de JSON weer terug. Bereken de totaalprijs en toon "Totaal: € [bedrag]" met number_format() (2 decimalen, komma, punt).
json_encode() zet PHP-data om naar een JSON-stringjson_decode($json, true) zet JSON om naar een associatieve array{}), gewone arrays worden JSON-arrays ([])JSON_PRETTY_PRINT voor leesbare JSON-outputjson_last_error() en json_last_error_msg()