XML til JSON-konverter

Lim inn XML til venstre, få JSON til høyre. Attributter beholdt med @_-prefiks. Ingen opplasting, ingen registrering.

  1. Lim inn XML i tekstområdet til venstre.
  2. Klikk «Konverter til JSON». Element-nesting blir til nestede objekter.
  3. Kopier JSON-en, eller last ned som data.json.
  4. 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.