Konverter mellem JSON og YAML
- Dashboard
- Dokumentation
- API
Hvad er denne JSON/YAML-konverter til?
Dette værktøj transformerer et YAML-dokument til JSON og omvendt, og bevarer datastrukturen (objekter, tabeller, skalartyper). JSON til YAML-konvertering, eller YAML til JSON, er en almindelig operation under udvikling: vi genererer en OpenAPI YAML-fil fra en JSON-specifikation, vi konverterer outputtet af en REST API til YAML for at overføre den til et konfigurationslager, vi oversætter et Kubernetes YAML-manifest til JSON for at videregive det til kubectl> --dry-runsonclient a --dry-run=HQ Handlinger med et JSON-skema. Mere generelt er det broen mellem verden af dataudveksling (JSON) og den for manuelt redigerbar konfiguration (YAML).
YAML vs JSON: Head-to-Head sammenligning
JSON og YAML adresserer lignende behov, men forskellige anvendelsestilfælde. Følgende tabel opsummerer de store tekniske forskelle, nyttige til at vælge mellem de to afhængigt af konteksten.
| Kriterium | JSON | YAML |
|---|---|---|
| Menneskelig læsbarhed | Gennemsnit (bøjler, anførselstegn overalt) | Stærk (indrykning, lille tegnsætning) |
| Udvidethed | Mere ordrig | Mere kortfattet |
| Kommentarer | Ikke understøttet | Understøttet (# kommentar) |
| Flere dokumenter i en enkelt fil | Nej | Ja, via separatoren --- |
| Ankre og aliaser (genbrug) | Nej | Ja (&anchor og *anchor) |
| Skriv system | Streng (streng, tal, bool, null, matrix, objekt) | Implicit tvang (ja, nej, null, datoer, fortolkede skalarer) |
| Parsing ydeevne | Meget hurtige, native parsere overalt | Langsommere, meget bredere grammatik |
| Adoption for REST API'er | De facto standard | Sjælden |
| Adoption til konfiguration | Sjælden (undtagen package.json, tsconfig.json) |
De facto standard (Kubernetes, CI/CD, Ansible) |
Hvornår skal man bruge JSON?
JSON er påkrævet, når et program taler til et andet program. Dens typiske anvendelsestilfælde:
- REST og GraphQL API'er: Forespørgsels- og svarnyttelast.
- Dataudveksling mellem mikrotjenester og beskedkøer.
- Native JavaScript-kode:
JSON.parseogJSON.stringifyuden afhængigheder. - Opbevaring på browsersiden:
localStorage,sessionStorage, IndexedDB. - AJAX- og
fetch-anmodninger. - Binære eller floworienterede varianter: BSON (MongoDB), JSON-linjer (logfiler, ML-datasæt), MessagePack.
- Konfiguration af JS/TS-værktøjer:
package.json,tsconfig.json,composer.json.
Hvornår skal man bruge YAML?
YAML er påkrævet, så snart et menneske regelmæssigt redigerer filen. Dens typiske anvendelsestilfælde:
- Docker Compose (
docker-compose.yml) og stakprofiler. - Kubernetes-manifester (Deployment, Service, Ingress, Helm-diagrammer).
- Ansible spillebøger og opgørelser.
- CI/CD Pipelines: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- OpenAPI / Swagger og AsyncAPI specifikationer.
- Annoteret applikationskonfiguration (Symfony, Spring Boot, Rails), hvor kommentarer er nyttige.
- Filer, der ofte redigeres i hånden, hvor kortfattethed og læsbarhed har forrang over parsinghastighed.
Almindelige faldgruber i YAML
YAML er mere eftergivende end JSON, hvilket gør det til et kraftfuldt, men forræderisk format. De mest almindelige faldgruber:
- Indrykning: Tabs er forbudt ifølge specifikationen, kun mellemrum er gyldige. Blanding af de to eller ændring af antallet af mellemrum i samme blok afbryder parsingen.
- Automatisk skalartvang:
ja,nej,til,fra,true,falsk,null,Ingen,~ed asll. Eksempel på fælde: et postnummer uden anførselstegn01234bliver hele tallet1234, og et landenavnNO(Norge) bliverfalsk. Indsæt altid tvetydige strenge i anførselstegn. - Flerlinjestrenge:
|(literal blok) beholder linjeskift som de er, mens>(foldet) erstatter linjeskift med mellemrum. De chompende flag-og+justerer adfærden ved det sidste spring. - YAML 1.1 vs 1.2: 1.1 (stadig meget almindelig, for eksempel via PyYAML som standard) behandler
yes/no/on/offsom booleans, hvilket 1.2 fjernede. Adfærden er også forskellig på grundtal 8. - Underforståede datoer:
2024-01-15uden anførselstegn tolkes som et datoobjekt af nogle parsere, ikke som en streng.
Side-by-side eksempler
Det samme dokument, udtrykt i JSON og derefter i YAML. Enkel konfiguration af en applikation med dens afhængigheder og dens miljø:
JSON-version
{
"name": "cdrn-app",
"version": "1.14.2",
"miljø": "produktion",
"afhængigheder": {
"php": "^8.3",
"symfony/framework-bundle": "^7.0",
"doctrine/orm": "^3.0"
},
"features": ["cache", "mailer", "kø"],
"debug": falsk
}
Tilsvarende YAML-version
# Applikationskonfiguration
navn: cdrn-app
version: 1.14.2
miljø: produktion
afhængigheder:
php: '^8.3'
symfoni/ramme-bundle: '^7.0'
doktrin/orm: '^3.0'
funktioner:
- cache
- mailer
- hale
debug: falsk
YAML-versionen er omkring 25 % kortere i tegn, accepterer en ledende kommentar og læser som en liste over egenskaber uden syntaktisk støj.
Sådan bruger du konverteren
Trin til at konvertere dine data:
- Indsæt dit kildedokument (JSON eller YAML) i inputfeltet.
- Vælg den ønskede konverteringsretning (JSON til YAML eller YAML til JSON).
- Klik på knappen Konverter: Det formaterede resultat vises i outputområdet.
- Tjek gengivelsen, og brug derefter kopieringsknappen til at hente resultatet til dit udklipsholder.
Konverteringen udføres lokalt i din browser eller via en dedikeret serverrute afhængigt af værktøjet: ingen følsomme data opbevares.
Ofte stillede spørgsmål
JSON eller YAML for mine konfigurationsfiler?
Hvis økosystemet pålægger et format (Kubernetes i YAML, package.json i JSON), skal du følge konventionen. Ellers favoriser YAML for lange, kommenterede konfigurationer, som du redigerer i hånden, og JSON for konfigurationer, der genereres af et program eller forbruges af kode. Tilstedeværelsen af nyttige kommentarer er ofte det afgørende argument til fordel for YAML.
Hvordan opbevarer man kommentarer under en YAML til JSON til YAML rundtur?
Det kan du ikke. JSON understøtter ikke kommentarer: Så snart du konverterer YAML til JSON, går kommentarer permanent tabt. For at bevare kommentarer under programmatisk redigering, brug en parser, der bevarer formatering, som f.eks. ruamel.yaml i Python i round-trip-tilstand, eller undgå helt at bruge JSON.
Hvorfor parses min YAML-fil korrekt lokalt, men fejler i produktionen?
Almindelige årsager: forskellige parserversioner (YAML 1.1 vs 1.2), faner introduceret af en editor, værdier uden anførselstegn, der ligner booleaner (NO, off) eller tal (01234), filkodning (UTF-8 BOM dårligt håndteret). Citer systematisk tvetydige strenge og indstil parserversionen i dit projekt.
Er JSON en delmængde af YAML?
Siden YAML 1.2, ja i praksis: ethvert gyldigt JSON-dokument er et gyldigt YAML 1.2-dokument. Det modsatte er falsk: et YAML-dokument, der bruger kommentarer, ankre, implicitte datoer eller flere dokumenter i en fil, kan ikke udtrykkes direkte i JSON uden tab af information.
Hvilke alternativer til JSON og YAML bør du kende?
TOML: populær til config (Cargo, pyproject.toml), godt kompromis mellem læsbarhed og eksplicit skrivning. INI: meget enkel, men ingen standard indlejret struktur. XML: udførligt, men stadig relevant for SOAP og nogle ældre Java-konfigurationer. HCL: bruges af Terraform. JSON5 og JSONC: JSON-udvidelser, der tillader kommentarer og efterfølgende kommaer.
Hvad er vægten af YAML vs JSON?
For tilsvarende struktur er YAML generelt 15 til 30 % kortere i bytes, takket være fraværet af anførselstegn omkring taster og de fleste strenge, og fraværet af klammeparenteser. På ledningen (HTTP-transport) forbliver minificeret JSON sammenlignelig, men YAML forbliver mere kompakt i læsbar version. For ren ydeevne på parsing-siden er JSON flere gange hurtigere, hvilket retfærdiggør dets brug til højtrafik-API'er.
Anmodningseksempel
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Inputskema
| Felt | Type | Påkrævet | Standard |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Endpoints
GET https://cdrn.fr/api/v1/tools- lister alle tilgængelige værktøjerGET https://cdrn.fr/api/v1/tools/json-yaml-converter- henter skemaet for dette værktøjPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- udfører dette værktøj med et JSON-payload