Tilbake
4.3
Dataformater – JSON og XML

4.3 Dataformater – JSON og XML

Parsing og behandling av JSON- og XML-data.

55 min
6 oppgaver
JSONXMLParsingSerialisering
Du leser den lesevennlige versjonen
Din fremgang i kapitlet
0 / 6 oppgaver

Et felles språk for data

Når to programmer skal utveksle data, trenger de et format begge forstår. De to mest brukte er JSON (JavaScript Object Notation) og XML (eXtensible Markup Language). Men før vi sammenligner dem, må vi lære to nøkkelord. Parsing betyr å lese og tolke data fra et format til Python-objekter – dictionaries, lister og så videre. Serialisering er motsatt vei: å konvertere Python-objekter til et tekstformat som kan lagres eller sendes. JSON til Python er parsing; Python til JSON er serialisering.

Python har en innebygd json-modul med fire sentrale funksjoner. json.loads() parser en JSON-streng til et Python-objekt, json.dumps() serialiserer et Python-objekt til en JSON-streng, json.load() leser JSON fra en fil, og json.dump() skriver JSON til en fil. Et lite minneknep: funksjonene med s på slutten jobber med strenger.

Når du parser, oversettes typene automatisk: et JSON-objekt blir en dict, en array blir en liste, en streng blir str, et tall blir int eller float, true/false blir True/False, og null blir None. Parser du en JSON-streng om en student, kan du etterpå skrive student['navn'] som om det alltid var en vanlig Python-dictionary.

📝Oppgave Quiz 1

JSON i praksis – strenger, filer og nesting

Når du serialiserer med json.dumps(), får du som standard alt på én linje. To parametere gjør resultatet pent: indent=2 legger til innrykk så det blir lesbart, og ensure_ascii=False bevarer norske tegn som æ, ø og å i stedet for å skrive dem som escape-koder. Disse to brukes nesten alltid sammen når et menneske skal lese filen.

Å jobbe med JSON-filer følger samme mønster som filhåndtering ellers. Du skriver med json.dump(data, f, indent=2, ensure_ascii=False) inni en with-blokk, og leser tilbake med json.load(f). Slik kan du lagre konfigurasjoner og data lokalt mellom kjøringer.

JSON sin store styrke er nesting – objekter inni objekter og lister inni lister – som lar deg representere komplekse strukturer. En skole kan inneholde en liste av klasser, der hver klasse inneholder en liste av elever, der hver elev har en liste av karakterer. Du navigerer ned i strukturen ved å veksle mellom ['nøkkel'] for dictionaries og [indeks] for lister. For å hente den første karakteren til den første eleven i den første klassen skriver du data['klasser'][0]['elever'][0]['karakterer'][0]. Det ser tett ut, men hvert ledd er bare ett steg dypere inn i strukturen.

📝Oppgave Quiz 2

XML og det store valget

Det andre formatet er XML, et markup-språk som strukturerer data med tagger, omtrent som HTML. Samme student som i JSON ville i XML hatt <navn>Emma Hansen</navn> og <alder>18</alder> inni en <student>-tagg. XML er mer ordrikt enn JSON, men har noen ekstra muligheter: det støtter attributter som <elev id="123">, det tillater kommentarer, og det støtter skjemavalidering. XML brukes mye i eldre systemer og bedriftsapplikasjoner.

I Python parser du XML med den innebygde modulen xml.etree.ElementTree, ofte importert som ET. Du leser inn med ET.fromstring(xml_data), finner elementer med root.findall('elev'), henter attributter med .get('id') og tekstinnhold med .find('navn').text. Det er mer omstendelig enn JSON, men nødvendig for mange API-er og systemer.

Så når velger du hva? JSON er enklere, mer kompakt, lettere å lese for mennesker, og oversettes naturlig til Python-objekter – det er standard for moderne web-API-er og raskt å parse. Svakhetene er at det ikke støtter kommentarer eller skjemaer. XML støtter attributter, kommentarer og skjemavalidering, og egner seg for dokumentorientert data, men er mer ordrikt og tyngre å parse. Tommelfingerregelen er enkel: bruk JSON for moderne API-er og enkle datastrukturer, og bruk XML når du må – ved eldre systemer, SOAP-tjenester eller RSS-feeds.

📝Oppgave Quiz 3

Oppsummering

Programmer trenger et felles språk for data, og to dominerer: JSON og XML. Vi lærte at parsing er å lese et format til Python-objekter, mens serialisering er den motsatte veien. Pythons json-modul gir oss loads/dumps for strenger og load/dump for filer, med indent=2 og ensure_ascii=False for pene, norske filer. JSON sin styrke er nesting, der du navigerer dype strukturer ved å veksle mellom nøkler og indekser.

XML strukturerer data med tagger, støtter attributter, kommentarer og skjemavalidering, og parses med xml.etree.ElementTree – men er mer ordrikt. Konklusjonen: velg JSON for moderne API-er og enkle data, og XML når du må, ved eldre systemer og feeds. I neste kapittel snur vi rollene og bygger vårt eget API med Flask.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.