Slik fikser du feilutformet JSON raskt: En utviklers felthåndbok

Slik fikser du feilutformet JSON raskt: En utviklers felthåndbok

7 min read

API-kallet ditt feilet akkurat med JSONDecodeError: Expecting property name enclosed in double quotes. Klokkene tikker. Dataene kom fra en LLM, og et sted i det 2000-tokens lange svaret har et eneste etterfølgende komma ødelagt hele pipelinen din.

Per mai 2026 er den raskeste måten å fikse feilutformete JSON-filer på å bruke automatiserte biblioteker som json_repair (Python) eller jsonrepair (npm). Disse verktøyene er spesialbygget for å fikse LLM-genererte syntaksfeil umiddelbart. For manuelle reparasjoner er de vanlige mistenkte etterfølgende komma, enkle anførselstegn eller usiterte nøkler — de tre vanligste bruddene på RFC 8259-standarden.

Den raskeste fiksingen: json_repair for LLM-utdata

Standard parsere som Pythons json.loads() er strenge etter design. Ett feilplassert tegn utløser en JSONDecodeError, og alt stopper opp. Dette er et daglig problem i 2026, fordi LLM-er rutinemessig pakker JSON inn i samtaletekst, avkorter svar midt i en setning, eller strør inn kommentarer som bryter spesifikasjonen.

json_repair-biblioteket er den foretrukne løsningen. Ifølge GitHub har dette prosjektet over 4700 stjerner per 2026. Det fungerer ved å “gjette” strengens intensjon — lukke manglende klammer, legge til anførselstegn og fjerne overflødig tekst rundt JSON-blokken.

Enkel 3-trinns prosess for json_repair: Inndata (ødelagt) -> Gjett intensjon -> Utdata (gyldig)

Python: Før og etter

Installer: pip install json-repair

Den ødelagte inndataen:

import json_repair

bad_json = '{"user": "Alice", "status": tru'
decoded_object = json_repair.loads(bad_json)

Hva som skjedde bak kulissene: json_repair så at tru sannsynligvis var true, la til den manglende lukkende klammen, og returnerte en gyldig Python-ordbok. Null manuell inngripen.

Salvage-modus: Når dataene er virkelig stygge

For tøffere tilfeller inkluderer json_repair (v0.59.5+) en Salvage-modus. Som det står i prosjektdokumentasjonen, er denne modusen bygget spesifikt for avkuttede AI-svar eller korrupte logger. Den kan tvinge arrays inn i objekter eller forkaste elementer som er for ødelagte til å reddes, slik at utdataen passer skjemaet ditt.

import json_repair

# Salvage mode for severely truncated data
result = json_repair.loads(
    '{"items": [{"id": 1, "name": "Widget"}, {"id": 2, "na',
    salvage_mode=True
)
# Result: {'items': [{'id': 1, 'name': 'Widget'}, {'id': 2}]}
# Dropped the incomplete 'na' but saved everything else

npm-alternativ

For Node.js-prosjekter håndterer jsonrepair-CLI-en den samme jobben:

# Fix a file in place
npx jsonrepair broken.json > fixed.json

# Fix a string in a script
const { jsonrepair } = require('jsonrepair');
const fixed = jsonrepair('{"name": "test",}');

Manuell feilsøking: Finn hva som brøt spesifikasjonen

Når automatisering ikke strekker til, må du finne nøyaktig hvor filen bryter RFC 8259. JSON er langt mindre ettergivende enn YAML eller JavaScript. Som JSONParser Diagnostics Team forklarer: “Parseren feiler ved det første tegnet den ikke forstår, noe som ofte er et nedstrøms symptom på et problem flere linjer tidligere.”

De tre JSON-morderne

Morder 1: Etterfølgende komma

Ifølge DEV Community er etterfølgende komma årsak nummer én til parsefeil. De er greie i JavaScript, men ulovlige etter det siste elementet i en JSON-array eller et JSON-objekt.

// BROKEN - trailing comma after "active"
{
  "name": "Alice",
  "status": "active",
}

// FIXED - no comma before closing brace
{
  "name": "Alice",
  "status": "active"
}

Morder 2: Enkle anførselstegn

JSON krever doble anførselstegn (") for både nøkler og strengverdier. Mange Python- og JavaScript-utviklere bruker ved et uhell enkle anførselstegn ('). Som TidyCode påpeker, er dette en obligatorisk fiks.

// BROKEN - single quotes
{'name': 'Alice'}

// FIXED - double quotes
{"name": "Alice"}

Morder 3: Usiterte nøkler

I JavaScript kan du skrive { name: "Alice" }. I JSON trenger hver nøkkel doble anførselstegn.

// BROKEN - unquoted key
{name: "Alice"}

// FIXED - quoted key
{"name": "Alice"}

Side-ved-side-sammenligning av ugyldig vs. gyldig JSON-syntaks

“Unexpected Token”-feilen

Når en validerer flagger “Unexpected Token”, betyr det at parseren støtte på NaN, Infinity eller undefined — JavaScript-konstanter som JSON ikke støtter. JSON tillater kun null, true, false og tall.

// BROKEN - NaN is not valid JSON
{"score": NaN, "result": Infinity}

// FIXED - replace with null or valid values
{"score": null, "result": null}

Streng parsing vs. reparasjonsparsing: Når skal du bruke hva

Riktig tilnærming avhenger av hvor dataene dine kommer fra. Menneske-redigerte konfigurasjonsfiler fortjener streng parsing for å tvinge forfatteren til å rette feil. Maskingenererte data fra LLM-er eller API-logger trenger reparasjonsbasert parsing.

Egenskap Streng (json.loads) Reparasjon (json_repair)
Etterfølgende komma Utløser JSONDecodeError Fjernes automatisk
Enkle anførselstegn Feiler Konverteres til doble anførselstegn
Avkuttede data Feiler Lukker åpne klammer/anførselstegn
Kommentarer Feiler Fjernes automatisk
Beste brukstilfelle Menneske-redigerte konfigurasjonsfiler LLM-utdata, API-logger

Skjema-styrte reparasjoner med Pydantic

Du kan styre reparasjonsprosessen med Pydantic v2 eller JSON Schema. Ved å gi json_repair et skjema gjør verktøyet mer enn å fikse syntaks — det kan korrigere typer (gjøre strengen "1" om til tallet 1) og fylle ut manglende obligatoriske felt med standardverdier.

from pydantic import BaseModel
import json_repair

class User(BaseModel):
    id: int
    name: str
    active: bool = True

# Broken JSON with wrong types
raw = '{"id": "42", "name": "Alice"}'
repaired = json_repair.loads(raw)

# Validate against schema
user = User(**repaired)
# user.id is now int(42), user.active defaults to True

Som Stefano Baccianella bemerket i sin prosjekt-sitering fra 2025, er denne tilnærmingen optimalisert for den “stort sett korrekte, men teknisk ugyldige” JSON-en som språkmodeller pleier å produsere.

Håndtering av flergigabyte-filer uten å krasje

Å reparere et 10KB-utdrag er enkelt. Å fikse en 2GB-fil krever en strategi som ikke spiser opp hele RAM-en din. Å laste hele filen inn i minnet forårsaker Out-of-Memory (OOM)-feil.

Strategi 1: Strømming med ijson

For massive datasett bruker du ijson til å behandle data bit for bit. Som Scrapfly nevner, behandler ijson data inkrementelt. Kombiner det med et oppryddingsskript som fikser problemer linje for linje før parsing.

import ijson

# Stream through a large JSON file
with open('huge_broken.json', 'r') as f:
    for item in ijson.items(f, 'records.item'):
        # Process each item individually
        process(item)

Strategi 2: CLI-rør for maksimal effektivitet

Den mest minneeffektive tilnærmingen for store filer er å bruke jsonrepair-CLI-en og røre utdata direkte til en ny fil:

# Streams repair, never loads full file into memory
jsonrepair large_broken.json > fixed.json

Dette er betydelig mer minneeffektivt enn å laste filen inn i Python eller en nettleser.

Konklusjon

Å fikse feilutformet JSON er ikke lenger manuelt arbeid takket være AI-bevisste biblioteker som json_repair. Du må fortsatt forstå RFC 8259-grunnleggende — ingen etterfølgende komma, ingen enkle anførselstegn, ingen usiterte nøkler — men automatisering er den eneste praktiske tilnærmingen for data i stor skala i 2026.

Arbeidsflyten er enkel: prøv et reparasjonsbibliotek først. Hvis det feiler, bruk en validator for å peke ut den eksakte syntaksfeilen. Dette holder applikasjonene dine i gang selv når innkommende data er alt annet enn perfekte.

Vanlige spørsmål

Støtter JSON offisielt kommentarer eller enkle anførselstegn?

Nei. RFC 8259-standarden forbyr kommentarer strengt. Enkle anførselstegn er også ugyldige — kun doble anførselstegn er tillatt for nøkler og strenger. Imidlertid kan verktøy som json_repair fjerne kommentarer og konvertere anførselstegn automatisk for å gjøre filer parsérbare av standardbiblioteker.

Hvordan håndterer jeg svært store feilutformede JSON-filer uten å krasje?

Bruk en strømmende parser som ijson for å behandle data i biter. Unngå å laste hele den feilutformede strengen inn i en enkelt variabel. For raskeste resultat, bruk CLI-reparasjonsverktøy som rører utdata direkte til en ny fil på disk uten å holde alt i minnet.

Hva er forskjellen på feilutformet JSON og ugyldig JSON?

Feilutformet (malformed) JSON bryter syntaksregler — manglende klammer, usiterte nøkler, etterfølgende komma — noe som gjør den umulig å parse. Ugyldig (invalid) JSON følger alle syntaksregler, men svarer ikke til et spesifikt JSON-skjema (for eksempel er et felt en streng når skjemaet forventer et heltall). Å fikse feilutformet JSON er strukturell reparasjon; å fikse ugyldig JSON handler om dataintegritet.

Kan jeg bruke json_repair med Pydantic-validering?

Ja. Kjør json_repair.loads() først for å fikse syntaksfeil, og send deretter den reparerte ordboken til Pydantic-modellen din for typevalidering og skjema-håndhevelse. Denne to-trinns tilnærmingen håndterer både strukturelle og semantiske problemer.

Hvorvidt JSON med JavaScript-stil kommentarer?

Standard JSON støtter ikke kommentarer, men json_repair kan fjerne //– og /* */-kommentarer automatisk. Hvis du trenger kommentarer i konfigurasjonsfilene dine, kan du vurdere å bruke JSONC (JSON med kommentarer)-formatet og en kompatibel parser som json5 for Python.

Related Articles