Hoofdstuk 20: JSON

← Terug naar overzicht

Wat is JSON?

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:

Let 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.

PHP-data naar JSON met json_encode

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}
?>

Oefening 1

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.

Jouw code:

Oefening 2

Maak een array $kleuren met de waarden "rood", "groen" en "blauw". Zet deze om naar JSON en toon het resultaat.

Jouw code:

Oefening 3

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.

Jouw code:

Oefening 4

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.

Jouw code:

JSON naar PHP-data met json_decode

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 (->).

Oefening 1

Decodeer de JSON-string '{"stad": "Amsterdam", "land": "Nederland"}' naar een associatieve array. Toon de waarde van "stad".

Jouw code:

Oefening 2

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>).

Jouw code:

Oefening 3

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".

Jouw code:

Oefening 4

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>).

Jouw code:

JSON en foutafhandeling

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();
}
?>

Oefening 1

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".

Jouw code:

Oefening 2

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"]'.

Jouw code:

Oefening 3

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).

Jouw code:

Samenvatting