Všichni, co vyvíjí webové aplikace a hlavně backenďáci, znají moc dobře chybu jako je tato:
SyntaxError: JSON.parse: unexpected character at line 1 column 26 of the JSON datajsonrepair je malý, ale mocný nástroj, který se snaží opravit poškozený nebo neplatný JSON tak, aby šel znovu správně načíst. Tady jsou odkazy na dokumentaci, na blogový článek autora, na github a na webový nástroj k vyzkoušení.
Popis a vlastnosti jsonrepair
Nástroj analyzuje neplatný JSON řetězec a zkusí ho transformovat na validní formát. Opravuje např. následující problémy:
- chybějící uvozovky kolem klíčů
- nadbytečné čárky nebo chybějící čárky
- špatné nebo chybějící závorky
- nevalidní uvozovky – například
‘text’→"text" - nahradit JS konstanty
undefined,NaN,Infinityza platné JSON hodnoty - nahradit Python konstanty
None,True,Falseza platné JSON hodnoty - komentáře a jiný ne-JSON syntax (např. z JS objektů)
- odstranit escape znaky ze stringů nebo opravit nesprávně zalomené řetězce
- převést jednořádkový JSON s
newlineznaky na validní pole objektů
Jak začít
Instalace přes npm:
npm install jsonrepairPoužití v Node.js:
import { jsonrepair } from 'jsonrepair';
const brokenJson = `
{
name: 'Pizzeria Roma',
address: "Main Street 123",
}`;
const fixed = jsonrepair(brokenJson);
// '{
// "name": "Pizzeria Roma",
// "address": "Main Street 123",
// }'Použití v CLI:
jsonrepair broken.json > fixed.jsonPoužití v Pythonu pomocí PythonMonkey
jsonrepair je možné použít přímo v Python pomocí balíčku PythonMonkey, který umožňuje spouštět JavaScript kód v Pythonu.
npm install jsonrepair
pip install pythonmonkey# repair.py
import pythonmonkey
jsonrepair = pythonmonkey.require('jsonrepair').jsonrepair
json = "[1,2,3,"
repaired = jsonrepair(json)
print(repaired)
# Výstup: [1,2,3]Příklady oprav
Klasické problémy
{
name: "Test", // komentář
id: NaN,
}{
"name": "Test",
"id": null
}JSONP obal
callback({
"id": 1,
"name": "Pepa"
});{
"id": 1,
"name": "Pepa"
}
Více JSON objektů oddělených novými řádky
{ "id": 1, "name": "Anna" }
{ "id": 2, "name": "Tomáš" }[
{ "id": 1, "name": "Anna" },
{ "id": 2, "name": "Tomáš" }
]MongoDB formát
{
"_id": ObjectId("5f43a1b2e4d1c4a3f0a7f123"),
"created": ISODate("2022-10-12T12:00:00Z"),
"value": NumberLong(100)
}{
"_id": "5f43a1b2e4d1c4a3f0a7f123",
"created": "2022-10-12T12:00:00Z",
"value": 100
}Výhody
- Opraví běžné chyby bez ručního ladění
- Skvělé pro debugování nebo automatické opravy vstupních dat
- Lze integrovat do testů, CI nástrojů, formulářů apod.
- Malý a čistý balíček s nulovými závislostmi
Omezení a nevýhody
- Neopraví vše – pokud je vstup extrémně rozbitý, může selhat
- Automatická oprava nemusí vždy odpovídat původnímu záměru –
jsonrepairsice vytvoří validní JSON, ale výsledek může být jiný, než co bylo původně zamýšleno - Mělo by se používat spíše pro ladění nebo vizualizaci
Příklady integrace jsonrepair do většího software
- při ladění response z API, která vrací špatný JSON
- při parsování uživatelských vstupů
- ve vývojářských nástrojích nebo editorech
- v CI pipeline – automatická oprava JSON logů před zpracováním
Závěr
jsonrepair je užitečný nástroj pro automatickou opravu syntakticky neplatného JSON formátu. Umožňuje jednoduše transformovat chybové nebo nedokončené JSON vstupy na validní struktury, které lze dále zpracovávat.
Alternativní balíček je napr. https://github.com/RyanMarcus/dirty-json