Converteren tussen JSON en YAML
- Dashboard
- Documentatie
- API
Waar dient deze JSON / YAML-converter voor?
Deze tool transformeert een YAML-document in JSON en omgekeerd, met behoud van de datastructuur (objecten, arrays, scalaire typen). De conversie JSON naar YAML, of YAML naar JSON, is een veelvoorkomende bewerking in ontwikkeling: men genereert een OpenAPI YAML-bestand vanuit een JSON-spec, converteert de uitvoer van een REST-API naar YAML om te committen in een configuratierepository, vertaalt een Kubernetes YAML-manifest naar JSON om door te geven aan kubectl --dry-run=client -o json, of stemt een GitHub Actions-workflow af op een JSON-schema. Meer in het algemeen is het de brug tussen de wereld van gegevensuitwisseling (JSON) en die van handmatig bewerkbare configuratie (YAML).
YAML vs JSON: directe vergelijking
JSON en YAML beantwoorden nauw verwante behoeften maar verschillende gebruiksgevallen. De volgende tabel vat de belangrijkste technische verschillen samen, nuttig om tussen beide te kiezen afhankelijk van de context.
| Criterium | JSON | YAML |
|---|---|---|
| Menselijke leesbaarheid | Gemiddeld (accolades, aanhalingstekens overal) | Sterk (inspringing, weinig interpunctie) |
| Uitvoerigheid | Uitvoeriger | Beknopter |
| Commentaren | Niet ondersteund | Ondersteund (# commentaar) |
| Meerdere documenten in één bestand | Nee | Ja, via de scheider --- |
| Anchors en aliases (hergebruik) | Nee | Ja (&anchor en *anchor) |
| Typesysteem | Strikt (string, number, bool, null, array, object) | Impliciete coercie (yes, no, null, datums, geïnterpreteerde scalairen) |
| Parse-prestaties | Zeer snel, native parsers overal | Trager, veel bredere grammatica |
| Adoptie voor REST-API's | De facto standaard | Zeldzaam |
| Adoptie voor configuratie | Zeldzaam (behalve package.json, tsconfig.json) |
De facto standaard (Kubernetes, CI/CD, Ansible) |
Wanneer JSON gebruiken?
JSON dringt zich op zodra een programma met een ander programma spreekt. Zijn typische gebruiksgevallen:
- REST- en GraphQL-API's: aanvraag- en antwoordpayloads.
- Gegevensuitwisseling tussen microservices en berichtenwachtrijen.
- Native JavaScript-code:
JSON.parseenJSON.stringifyzonder afhankelijkheid. - Opslag aan browserkant:
localStorage,sessionStorage, IndexedDB. - AJAX-verzoeken en
fetch. - Binaire of stream-georiënteerde varianten: BSON (MongoDB), JSON Lines (logs, ML-datasets), MessagePack.
- Configuratie van JS / TS-tools:
package.json,tsconfig.json,composer.json.
Wanneer YAML gebruiken?
YAML dringt zich op zodra een mens regelmatig het bestand bewerkt. Zijn typische gebruiksgevallen:
- Docker Compose (
docker-compose.yml) en stack-profielen. - Kubernetes-manifesten (Deployment, Service, Ingress, Helm charts).
- Ansible-playbooks en inventories.
- CI/CD-pipelines: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- OpenAPI- / Swagger- en AsyncAPI-specificaties.
- Geannoteerde applicatieconfiguratie (Symfony, Spring Boot, Rails) waar commentaren nuttig zijn.
- Bestanden die regelmatig met de hand worden bewerkt, waar beknoptheid en leesbaarheid prevaleren boven parse-snelheid.
Veelvoorkomende valkuilen in YAML
YAML is toleranter dan JSON, wat het een krachtig maar verraderlijk formaat maakt. De meest voorkomende valkuilen:
- Inspringing: tabs zijn verboden door de specificatie, alleen spaties zijn geldig. Het mengen van beide of het wijzigen van het aantal spaties in eenzelfde blok breekt de parsing.
- Automatische scalaire coercie:
yes,no,on,off,true,false,null,None,~worden geparseerd als booleans of als null. Voorbeeldvalkuil: een niet-gequote postcode01234wordt het gehele getal1234, en een landnaamNO(Noorwegen) wordtfalse. Plaats dubbelzinnige tekenreeksen altijd tussen aanhalingstekens. - Meerregelige strings:
|(block literal) behoudt de regeleinden als zodanig, terwijl>(folded) de regeleinden vervangt door spaties. De chomping-indicatoren-en+passen het gedrag op het laatste einde aan. - YAML 1.1 vs 1.2: 1.1 (nog steeds zeer verspreid, bijvoorbeeld via PyYAML standaard) behandelt
yes/no/on/offals booleans, wat 1.2 heeft verwijderd. Het gedrag verschilt ook bij getallen in basis 8. - Impliciete datums:
2024-01-15zonder aanhalingstekens wordt door sommige parsers geïnterpreteerd als een datumobject, niet als een tekenreeks.
Voorbeelden naast elkaar
Hetzelfde document, uitgedrukt in JSON en vervolgens in YAML. Eenvoudige configuratie van een applicatie met zijn afhankelijkheden en zijn omgeving:
JSON-versie
{
"name": "cdrn-app",
"version": "1.14.2",
"environment": "production",
"dependencies": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "queue"],
"debug": false
}
Equivalente YAML-versie
# Configuration de l'application
name: cdrn-app
version: 1.14.2
environment: production
dependencies:
php: '^8.3'
symfony/framework-bundle: '^7.0'
doctrine/orm: '^3.0'
features:
- cache
- mailer
- queue
debug: false
De YAML-versie is ongeveer 25% korter in tekens, accepteert een commentaar bovenaan en leest als een lijst van eigenschappen zonder syntactische ruis.
Hoe u de converter gebruikt
Stappen om uw gegevens te converteren:
- Plak uw brondocument (JSON of YAML) in het invoerveld.
- Selecteer de gewenste conversierichting (JSON naar YAML, of YAML naar JSON).
- Klik op de conversieknop: het opgemaakte resultaat verschijnt in het uitvoergebied.
- Controleer de weergave en gebruik vervolgens de kopieerknop om het resultaat in uw klembord te krijgen.
De conversie wordt lokaal uitgevoerd in uw browser of via een speciale serverroute afhankelijk van de tooling: geen gevoelige gegevens worden bewaard.
Veelgestelde vragen
JSON of YAML voor mijn configuratiebestanden?
Als het ecosysteem een formaat oplegt (Kubernetes in YAML, package.json in JSON), volg de conventie. Anders, verkies YAML voor lange en geannoteerde configuraties die u met de hand bewerkt, en JSON voor configuraties die door een programma worden gegenereerd of door code worden geconsumeerd. De aanwezigheid van nuttige commentaren is vaak het doorslaggevende argument voor YAML.
Hoe behoud ik commentaren bij een round-trip YAML naar JSON naar YAML?
U kunt het niet. JSON ondersteunt geen commentaren: zodra men YAML naar JSON converteert, gaan de commentaren definitief verloren. Om commentaren te behouden tijdens programmatische bewerkingen, gebruikt u een parser die de opmaak behoudt, zoals ruamel.yaml in Python in round-trip modus, of vermijd volledig de passage via JSON.
Waarom parseert mijn YAML-bestand correct lokaal maar faalt in productie?
Veelvoorkomende oorzaken: verschillende parser-versies (YAML 1.1 vs 1.2), tabs geïntroduceerd door een editor, niet-gequote waarden die op booleans (NO, off) of op getallen (01234) lijken, bestandscodering (slecht beheerde UTF-8 BOM). Plaats dubbelzinnige tekenreeksen systematisch tussen aanhalingstekens en fixeer de parser-versie in uw project.
Is JSON een subset van YAML?
Sinds YAML 1.2, in de praktijk ja: elk geldig JSON-document is een geldig YAML 1.2-document. Het omgekeerde is onwaar: een YAML-document dat commentaren, anchors, impliciete datums of meerdere documenten in één bestand gebruikt, kan niet direct in JSON worden uitgedrukt zonder informatieverlies.
Welke alternatieven voor JSON en YAML moet ik kennen?
TOML: populair voor configuratie (Cargo, pyproject.toml), goede afweging tussen leesbaarheid en expliciete typering. INI: zeer eenvoudig, maar geen standaard geneste structuur. XML: uitvoerig, maar blijft relevant voor SOAP en sommige legacy Java-configuraties. HCL: gebruikt door Terraform. JSON5 en JSONC: JSON-uitbreidingen die commentaren en trailing komma's toestaan.
Wat is het gewicht van YAML vs JSON?
Bij equivalente structuur is YAML over het algemeen 15 tot 30% korter in bytes, dankzij het ontbreken van aanhalingstekens rond sleutels en de meeste tekenreeksen, en het ontbreken van accolades. Op het netwerk (HTTP-transport) blijft geminificeerde JSON vergelijkbaar, maar YAML blijft compacter in de leesbare versie. Voor pure parse-prestaties is JSON meerdere keren sneller, wat zijn gebruik voor high-traffic API's rechtvaardigt.
Voorbeeldverzoek
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Invoerschema
| Veld | Type | Vereist | Standaard |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Endpoints
GET https://cdrn.fr/api/v1/tools- toont alle beschikbare toolsGET https://cdrn.fr/api/v1/tools/json-yaml-converter- geeft het schema van deze tool terugPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- voert deze tool uit met een JSON-payload