O Que Mudou Entre Estes Dois Documentos
O diff entre os objetos original e modificado mostra cinco alterações:
agemudou de30para31emailmudou dealice@example.comparaalice@newdomain.comrolesganhou um terceiro elemento:"viewer"settings.thememudou de"dark"para"light"settings.languagefoi adicionado com valor"en"
Diff Textual vs Semântico de JSON
Um diff textual compara os dois documentos como strings, linha por linha. Funciona bem quando ambos foram formatados consistentemente. Se a ordem das chaves difere entre os dois documentos, um diff textual marcará toda linha como alterada.
Um diff semântico interpreta ambos os documentos primeiro, depois compara as estruturas de dados. Não se importa com ordem de chaves, espaços ou indentação.
Preparando JSON para um Diff Textual Limpo
jq --sort-keys . original.json > original_formatted.json
jq --sort-keys . modified.json > modified_formatted.json
diff original_formatted.json modified_formatted.json
Formato JSON Patch (RFC 6902)
[
{"op": "replace", "path": "/age", "value": 31},
{"op": "replace", "path": "/email", "value": "alice@newdomain.com"},
{"op": "add", "path": "/roles/2", "value": "viewer"},
{"op": "replace", "path": "/settings/theme", "value": "light"},
{"op": "add", "path": "/settings/language", "value": "en"}
]
Ferramentas CLI para Diff JSON
jd
jd original.json modified.json
jq com diff
diff <(jq --sort-keys . original.json) <(jq --sort-keys . modified.json)