"YAML is makkelijk leesbaar, maar waarom troont JSON op de troon van data-uitwisseling?"
"Waar is YAML sterk, en waarom kon JSON niet verslagen worden?"


🔥 1. De opkomst van de strijd tussen datatypes

Lang geleden hadden programmeurs een manier nodig om data op te slaan en uit te wisselen.
In het begin was XML de heerser.

<persoon>
    <naam>Alice</naam>
    <leeftijd>25</leeftijd>
    <vaardigheden>
        <vaardigheid>Python</vaardigheid>
        <vaardigheid>Django</vaardigheid>
    </vaardigheden>
</persoon>

Echter, XML was te omvangrijk en zwaar, en moeilijk te lezen.
Dus verschenen JSON en YAML.


🤖 2. JSON: De troon voor data-uitwisseling veroveren

In 2001 introduceerde Douglas Crockford JSON, geïnspireerd op de objectnotatie van JavaScript.
"Een eenvoudig, lichtgewicht en machine-leesbaar data-uitwisselingsformaat!"

Het doel van JSON was duidelijk:
Een structuur die door mensen gelezen kan worden, maar die voor computers nog gemakkelijker te begrijpen is
Geoptimaliseerd voor dataverkeer tussen browser en server
Kan naadloos integreren met objectgeoriënteerde talen (JavaScript, Python, enz.)

Voorbeeld van JSON:

{
    "naam": "Alice",
    "leeftijd": 25,
    "vaardigheden": ["Python", "Django"]
}
  • Met alleen {} en [] kon de datastructuur worden weergegeven,
  • Omdat JavaScript JSON direct kon verwerken, werd het razendsnel populair.
  • In het bijzonder werd JSON de standaard dataformat voor REST API's, waardoor het de troon veroverde.

🧐 3. YAML: Een dataformat dat makkelijk te begrijpen is voor mensen

Echter, er waren ook mensen die een format wilden dat makkelijker te lezen was dan JSON.
"Zou het niet beter zijn om zonder onnodige accolade en aanhalingstekens te schrijven bij het uitdrukken van datastructuren?"

Dus, in 2001 verscheen YAML (Ain’t Markup Language).

naam: Alice
leeftijd: 25
vaardigheden:
  - Python
  - Django

De kenmerken van YAML:
Goed leesbaar voor mensen (netjes zonder accolades of aanhalingstekens!)
Ondersteunt opmerkingen (gebruik #)
Handig voor gebruik in configuratiebestanden

Hierdoor heeft YAML zich bewezen als de heerser van configuratiebestanden.
Zaken zoals Kubernetes, Docker, Ansible, CI/CD en GitHub Actions gebruiken YAML als standaardformat!

Echter kon YAML JSON niet verslaan in de markt voor data-uitwisseling.
Waarom is dat? 🤔


🤯 4. Waarom kon YAML JSON niet verslaan?

Als YAML eenvoudig leesbaar is voor mensen, had het misschien populairder kunnen worden dan JSON…
Maar de realiteit was anders.

✅ Redenen waarom JSON overwinnen:
1. Is de syntaxis te vrij?
- JSON heeft een duidelijke structuur met {} en [], maar,
- YAML drukt zijn structuur uit via inspringing, wat de kans op fouten vergroot.
- Slechts één spatie verkeerd kan een fout veroorzaken! (Vooral het Tab vs Space probleem in YAML 🤯)

  1. Langzame parsing
  2. JSON kan snel worden geparsed, maar,
  3. YAML heeft, vanwege de flexibele syntaxis, meer te interpreteren, waardoor het trager is.
  4. Bij het verwerken van grote hoeveelheden data is het minder efficiënt dan JSON.

  5. YAML heeft beveiligingsproblemen

  6. YAML kan uitvoerbare code (!python/object) bevatten,
  7. wat beveiligingsrisico's (RCE, Remote Code Execution) met zich meebrengt.
  8. JSON is puur data en daarom veilig!

  9. Wordt niet standaard ondersteund in browsers

  10. JSON is de standaard objectstructuur van JavaScript, maar,
  11. YAML vereist aparte bibliotheken.

JSON gekozen als de standaard voor web en data-uitwisseling.


🚀 5. Maar YAML heeft de troon van configuratiebestanden veroverd!

Dat betekent niet dat YAML verdwenen is. Terwijl JSON de standaard voor data-uitwisseling is geworden, is YAML de standaard voor configuratiebestanden geworden.

🔥 Redenen waarom YAML krachtig is:

  • Ondersteunt opmerkingen (#) → handig voor het schrijven van configuratiebestanden
  • Gemakkelijk leesbaar en aanpasbaar voor mensen
  • Gebruikt als kernformat in DevOps voor Kubernetes, Docker, Ansible, enz.

Werkelijke gebruiksgevallen:

  • docker-compose.yml
  • kubernetes.yml
  • github-actions.yml
  • ansible-playbook.yml

Echter, als je YAML voor data-uitwisseling wilt gebruiken, zijn er veeleisen. Bijvoorbeeld, in Django Rest Framework (DRF) kun je de serializer instellen op YAMLRenderer, maar, blijft de standaard JSONRenderer.

from rest_framework.renderers import JSONRenderer, YAMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    renderer_classes = [JSONRenderer, YAMLRenderer]

    def get(self, request):
        data = {"bericht": "Hallo, YAML!"}
        return Response(data)

Maar de meeste API's gebruiken standaard JSON! Omdat het door de parsing-snelheid en beveiligingsproblemen niet veel gebruikt wordt.

JSON vs YAML Middeleeuwse Strijd


🎯 6. Conclusie: JSON vs YAML, wie is beter?

✅ Wanneer je voor JSON moet kiezen:
- Web API's, data-uitwisseling (snelheid & stabiliteit zijn belangrijk!)
- Opslag van NoSQL data
- Direct gebruik in de browser

✅ Wanneer je voor YAML moet kiezen:
- Configuratiebestanden (Kubernetes, Docker, CI/CD)
- Het schrijven van documenten die eenvoudig leesbaar zijn
- Taken gerelateerd aan DevOps

Samenvattend:
🚀 "JSON is de koning van data-uitwisseling, YAML is de koning van configuratiebestanden!"