XML til JSON-konverter
Lim inn XML til venstre, få JSON til høyre. Attributter beholdt med @_-prefiks. Ingen opplasting, ingen registrering.
- Lim inn XML i tekstområdet til venstre.
- Klikk «Konverter til JSON». Element-nesting blir til nestede objekter.
- Kopier JSON-en, eller last ned som data.json.
- Gjentatte barn-elementer kollapses automatisk til arrays.
Hva gjør det?
Parser XML til et JSON-objekt med fast-xml-parser-konvensjoner: barn-elementer blir objektegenskaper, gjentatte barn blir arrays, attributter beholdes med `@_`-prefiks på foreldreobjektet, og tekstinnhold fra blandede noder havner på en `#text`-nøkkel. Tallverdier og booleanske verdier i attributter typifiseres automatisk via `parseAttributeValue: true` — XML `count="42"` runder som `"@_count": 42`, ikke strengen `"42"`.
Eksempel
XML-inndata:
<root version="1">
<name>Ada</name>
<tags>math</tags>
<tags>logic</tags>
</root> JSON-utdata:
{
"root": {
"@_version": 1,
"name": "Ada",
"tags": ["math", "logic"]
}
} Vanlige XML-fallgruver og hvordan håndtere dem
XML har kanttilfeller som JSON ikke har. Disse mønstrene gir overraskende utdata.
- Enkelt barn vs. flere barn. `<a><b/></a>` produserer `{"a":{"b":""}}` (enkelt barn som objektegenskap), men `<a><b/><b/></a>` produserer `{"a":{"b":["",""]}}` (flere som array). Hvis nedstrømskoden alltid forventer array, normaliser etter konvertering.
- Attributter vs. barn-elementer. Attributter dukker opp med `@_`-prefiks på samme nivå som barn. `<user id="1"><name>Ada</name></user>` blir `{"user":{"@_id":1,"name":"Ada"}}`. Noen verktøy slår sammen attributter i egenskaper — det er en annen konvensjon enn den brukt her.
- Blandet innhold (tekst + barn-elementer). `<p>Hello <b>world</b></p>` produserer `{"p":{"#text":"Hello ","b":"world"}}`. Teksten fanges, men dens posisjon relativ til barna går tapt — JSON har ingen måte å representere ordnet blandet innhold. De fleste config-stil-XML-er treffer ikke dette tilfellet.
- Navnerom. Navnerom (`<x:foo xmlns:x="...">`) bevares som del av elementnavnet (`x:foo`). Mange XML-konsumenter fjerner prefikset; trenger du det, gjør det som etterbehandling.
- CDATA-seksjoner. `<![CDATA[some text]]>` parses som ren tekst og slår seg sammen med `#text` til foreldren. CDATA-innrammingen går tapt — greit for de fleste tilfeller, men verdt å merke seg hvis innrammingen var semantisk meningsfull.
- Selv-lukkende vs. tomt. `<x/>` og `<x></x>` er ekvivalente i XML og produserer samme JSON-utdata (`""` for verdien). Den opprinnelige innrammingen kan ikke gjenopprettes fra JSON-en.
Ofte stilte spørsmål
Hvorfor har utdataen min `@_`-prefiks på attributter?
Det skiller XML-attributter fra barn-elementer. Uten prefiks ville `<user id="1"><id>foo</id></user>` hatt to `id`-nøkler — et JSON-objekt kan bare ha én. Prefikset holder begge tur-retur-ferdige. Hvis du ikke trenger det, erstatt `"@_"` med `""` i en etterbehandling (og godta kollisjonsrisiko).
Kan jeg få JSON-en uten den omsluttende rotnøkkelen?
XML har alltid ett enkelt rot-element. JSON beholder den innpakningen for tur-retur. Strip den etter konvertering hvis du vil ha det indre objektet — `result.root` i stedet for `result`.
Bevares XML-kommentarer?
Nei. JSON har ingen kommentarsyntaks, og parseren er konfigurert til å ignorere XML-kommentarer. Trenger du å bevare kommentarer, må du bruke en annen mellomliggende representasjon som støtter dem.
Er attributtverdier typifisert?
Ja — `parseAttributeValue: true` er satt, så `count="42"` blir `"@_count": 42` (tall) og `enabled="true"` blir `"@_enabled": true` (boolean). Trenger du attributter som strenger, etterbehandle eller forkast konfigurasjonen.
Lastes XML-en min opp?
Nei. Alt kjører i nettleseren din — XML-en parses av JavaScript på denne siden og sendes aldri til noen server. Verifiser i nettleserens utviklerverktøy.
Kan den håndtere veldig store XML-filer?
Opp til omtrent 30 MB før tekstområdet sakker. Parseren skalerer lineært. For større inndata, kjør fast-xml-parser på kommandolinjen — samme bibliotek.