JSON diff - jak porovnávám API odpovědi a configy
JSON porovnávám denně. API odpovědi, package.json mezi projekty, tsconfig když něco nefunguje. A klasický textový diff na to moc nefunguje.
Proč je to jiné než textový diff
JSON má strukturu. Pořadí klíčů v objektu je technicky jedno - {"a":1,"b":2} je stejné jako {"b":2,"a":1}. Ale textový diff to ukáže jako změnu.
Taky formátování. Někdo má JSON na jednom řádku, někdo pěkně odsazený. Obsah stejný, diff vypadá jako by se změnilo všechno.
Co používám
JSON Diff - udělal jsem ho přesně na tohle. Parsuje JSON, porovnává struktury, zobrazuje stromově. Ignoruje formátování a pořadí klíčů.
jq v terminálu - pro rychlé porovnání dvou souborů:
diff <(jq -S . file1.json) <(jq -S . file2.json)
-S seřadí klíče, takže pořadí nevadí.
VS Code - otevřu oba soubory, pravý klik, "Compare Selected". Funguje, ale nerozumí JSON sémantice.
Časté use cases
API testování - uložím si expected response, porovnám s actual. Hned vidím co se změnilo.
Config debugging - nefunguje build? Porovnám tsconfig s projektem co funguje. Většinou najdu rozdíl.
Package.json - co má kolega jinak? Proč mu to buildí a mně ne? Diff verzí dependencies.
Jeden tip
Před porovnáním naformátujte oba JSONy stejně. Buď minifikované nebo pěkně odsazené. V JSON Diff to dělám automaticky, ale v jiných nástrojích to pomůže.
A pozor na floating point čísla - 1.0 a 1 můžou vypadat jako rozdíl, ale často jde o to samé.
Máte lepší workflow? Napište na info@sikulovi.cz.
Vyzkoušejte PorovnejText.cz zdarma
Nejrychlejší český nástroj pro porovnání textů. Vše probíhá ve vašem prohlížeči, žádná registrace není potřeba.
Porovnat texty nyní →Související články
Git diff mi nestačí - kdy a proč používám online diff
Jako programátor pracuju s git diff denně. Ale někdy potřebuju rychle porovnat dva kousky kódu a nechce se mi kvůli tomu otvírat IDE. Kdy použít co.
Markdown a README - jak kontroluju změny
Píšete dokumentaci v Markdownu? Tady je jak porovnávám změny v README a dalších md souborech.
Jak automatizuju changelog z Git commitů
Ruční psaní release notes mě nebavilo. Tady je jak jsem to automatizoval pomocí Conventional Commits.