Konvertera mellan JSON och YAML
- Panel
- Dokumentation
- API
Vad används den här JSON / YAML-konverteraren till?
Detta verktyg omvandlar ett YAML-dokument till JSON och vice versa, samtidigt som datastrukturen bevaras (objekt, arrayer, skalära typer). Konverteringen från JSON till YAML, eller YAML till JSON, är en vanlig operation i utveckling: man genererar en OpenAPI YAML-fil från en JSON-spec, konverterar utdata från ett REST-API till YAML för att committa det i ett konfigurationsrepo, översätter ett Kubernetes-manifest från YAML till JSON för att skicka det till kubectl --dry-run=client -o json, eller anpassar ett GitHub Actions-workflow till ett JSON-schema. Mer generellt är det bryggan mellan datautbytesvärlden (JSON) och världen för manuell konfigurationsredigering (YAML).
YAML vs JSON: direkt jämförelse
JSON och YAML adresserar närliggande behov men olika användningsfall. Tabellen nedan sammanfattar de viktigaste tekniska skillnaderna, användbart för att välja mellan de två beroende på sammanhang.
| Kriterium | JSON | YAML |
|---|---|---|
| Mänsklig läsbarhet | Medel (klamrar, citattecken överallt) | Stark (indentering, lite interpunktion) |
| Verbositet | Mer utförlig | Mer koncis |
| Kommentarer | Stöds inte | Stöds (# commentaire) |
| Flera dokument i en enda fil | Nej | Ja, via separatorn --- |
| Anchors och aliases (återanvändning) | Nej | Ja (&anchor och *anchor) |
| Typsystem | Strikt (string, number, bool, null, array, object) | Implicit typkonvertering (yes, no, null, datum, tolkade skalärer) |
| Parsing-prestanda | Mycket snabb, nativa parsers överallt | Långsammare, mycket bredare grammatik |
| Användning för REST-API:er | De facto-standard | Ovanligt |
| Användning för konfiguration | Ovanligt (utom package.json, tsconfig.json) |
De facto-standard (Kubernetes, CI/CD, Ansible) |
När ska man använda JSON?
JSON tar över så snart ett program pratar med ett annat program. Dess typiska användningsfall:
- REST- och GraphQL-API:er: payload för förfrågan och svar.
- Datautbyte mellan mikrotjänster och meddelandeköer.
- Nativ JavaScript-kod:
JSON.parseochJSON.stringifyutan beroende. - Lagring på klientsidan:
localStorage,sessionStorage, IndexedDB. - AJAX-förfrågningar och
fetch. - Binära eller strömorienterade varianter: BSON (MongoDB), JSON Lines (loggar, ML-dataset), MessagePack.
- Konfiguration för JS / TS-verktyg:
package.json,tsconfig.json,composer.json.
När ska man använda YAML?
YAML tar över så snart en människa regelbundet redigerar filen. Dess typiska användningsfall:
- Docker Compose (
docker-compose.yml) och stackprofiler. - Kubernetes-manifest (Deployment, Service, Ingress, Helm charts).
- Ansible-playbooks och inventories.
- CI/CD-pipelines: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
- OpenAPI / Swagger- och AsyncAPI-specifikationer.
- Annoterad applikationskonfiguration (Symfony, Spring Boot, Rails) där kommentarer är användbara.
- Filer som ofta redigeras för hand, där koncis och läslighet är viktigare än parse-hastighet.
Vanliga fallgropar i YAML
YAML är mer tillåtande än JSON, vilket gör det till ett kraftfullt men förrädiskt format. De vanligaste fallgroparna:
- Indentering: tabbar är förbjudna enligt specifikationen, endast mellanslag är giltiga. Att blanda dessa eller ändra antalet mellanslag i samma block bryter parsingen.
- Automatisk typkonvertering av skalärer:
yes,no,on,off,true,false,null,None,~parsas som booleaner eller null. Fallgropsexempel: ett postnummer01234utan citattecken blir heltalet1234, och ett landsnamnNO(Norge) blirfalse. Sätt alltid tvetydiga strängar inom citattecken. - Flerradssträngar:
|(block literal) behåller radbrytningar som de är, medan>(folded) ersätter radbrytningar med mellanslag. Chomping-indikatorerna-och+justerar beteendet på den sista radbrytningen. - YAML 1.1 vs 1.2: 1.1 (fortfarande mycket spridd, till exempel via PyYAML som standard) behandlar
yes/no/on/offsom booleaner, vilket 1.2 har tagit bort. Beteenden skiljer sig också för tal i bas 8. - Implicita datum:
2024-01-15utan citattecken tolkas som ett datumobjekt av vissa parsers, inte som en sträng.
Sida vid sida-exempel
Samma dokument, uttryckt i JSON och sedan i YAML. Enkel konfiguration av en applikation med dess beroenden och miljö:
JSON-version
{
"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
}
Motsvarande YAML-version
# 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
YAML-versionen är cirka 25 % kortare i tecken, accepterar en kommentar i toppen och läses som en lista över egenskaper utan syntaktiskt brus.
Så använder du konverteraren
Steg för att konvertera dina data:
- Klistra in ditt källdokument (JSON eller YAML) i inmatningsfältet.
- Välj önskad konverteringsriktning (JSON till YAML eller YAML till JSON).
- Klicka på konverteringsknappen: det formaterade resultatet visas i utdataområdet.
- Verifiera resultatet och använd sedan kopieringsknappen för att hämta det till ditt urklipp.
Konverteringen utförs lokalt i din webbläsare eller via en dedikerad serverrutt beroende på tooling: ingen känslig data sparas.
Vanliga frågor
JSON eller YAML för mina konfigurationsfiler?
Om ekosystemet kräver ett format (Kubernetes i YAML, package.json i JSON), följ konventionen. Annars, föredra YAML för långa och annoterade konfigurationer som du redigerar för hand, och JSON för konfigurationer genererade av ett program eller konsumerade av kod. Förekomsten av användbara kommentarer är ofta det avgörande argumentet för YAML.
Hur behåller man kommentarer vid en round-trip YAML till JSON till YAML?
Det går inte. JSON stöder inte kommentarer: så fort man konverterar YAML till JSON går kommentarerna förlorade definitivt. För att bevara kommentarer vid programmatiska redigeringar, använd en parser som behåller layouten, som ruamel.yaml i Python i round-trip-läge, eller undvik helt att gå via JSON.
Varför parsas min YAML-fil korrekt lokalt men misslyckas i prod?
Vanliga orsaker: olika parserversioner (YAML 1.1 vs 1.2), tabbar införda av en editor, ociterade värden som ser ut som booleaner (NO, off) eller tal (01234), filkodning (UTF-8 BOM dåligt hanterad). Sätt alltid tvetydiga strängar inom citattecken och fixera parserversionen i ditt projekt.
Är JSON en delmängd av YAML?
Sedan YAML 1.2, ja i praktiken: varje giltigt JSON-dokument är ett giltigt YAML 1.2-dokument. Det omvända gäller inte: ett YAML-dokument som använder kommentarer, anchors, implicita datum eller flera dokument i en fil kan inte uttryckas direkt i JSON utan informationsförlust.
Vilka alternativ till JSON och YAML bör man känna till?
TOML: populärt för konfiguration (Cargo, pyproject.toml), bra kompromiss mellan läsbarhet och explicit typning. INI: mycket enkelt, men ingen standardiserad kapslad struktur. XML: utförligt, men fortfarande relevant för SOAP och vissa legacy Java-konfigurationer. HCL: används av Terraform. JSON5 och JSONC: utvidgningar av JSON som tillåter kommentarer och efterföljande kommatecken.
Hur stor är YAML jämfört med JSON?
Vid likvärdig struktur är YAML i allmänhet 15 till 30 % kortare i bytes, tack vare avsaknaden av citattecken kring nycklar och de flesta strängar och avsaknaden av klamrar. På wire (HTTP-transport) förblir minifierad JSON jämförbar, men YAML är fortfarande mer kompakt i läsbar version. För ren prestanda vid parsing är JSON flera gånger snabbare, vilket motiverar dess användning för API:er med hög trafik.
Exempelförfrågan
curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
-H "Content-Type: application/json" \
-d '{"json":"...","space_tabulation":1}'
Indatasschema
| Fält | Typ | Obligatorisk | Standard |
|---|---|---|---|
json |
text | ✓ | – |
space_tabulation |
integer | ✓ | – |
Slutpunkter
GET https://cdrn.fr/api/v1/tools- listar alla tillgängliga verktygGET https://cdrn.fr/api/v1/tools/json-yaml-converter- hämtar schemat för detta verktygPOST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute- kör detta verktyg med en JSON-payload