Qabbel żewġ strutturi JSON
- Dashboard
- Dokumentazzjoni
- API
Għaliex tqabbel żewġ JSON?
It-tqabbil ta 'żewġ strutturi JSON joħroġ regolarment fil-ħajja ta' żviluppatur. Risposta API li tinbidel wara aġġornament. Fajl ta' konfigurazzjoni li jvarja bejn żewġ ambjenti. A esportazzjoni ta' oġġetti li jridu jallinjaw ma' referenza. AJSON difftwieġeb preċiżament din il-mistoqsija: x'kien miżjud, imħassra jew modifikat, u fejn?
diff linja b'linja (a la git diff) spiss ma jkunx biżżejjed. Jekk l-ifformattjar
differenti (spazji, ordni ewlenin), id-diff testwali tirrapporta mijiet ta 'linji filwaqt li l-istruttura
data hija identika. Komparatur JSON jaħdem fuq l-istruttura darba parsed, li jelimina dan
storbju u jiżvela biss differenzi semantiċi.
Il-format tad-diff prodott mill-għodda
Għal kull devjazzjoni, l-għodda tirritorna:
- mogħdija f'format JSONPath simplifikat, pereżempju
$.user.address[0].city; - tip wieħed fostmiżjud (miżjud fuq il-lemin), imneħħi (preżenti fuq ix-xellug biss), modifikati (valuri differenti);
- il-valur tax-xellug u/jew il-valur it-tajjeb skont it-tip.
Diff vojt ifisser li ż-żewġ JSONs huma strutturalment identiċi, irrispettivament minn tagħhom ifformattjar jew ordni taċ-ċavetta.
Kif l-algoritmu jaqsam iż-żewġ strutturi
L-algoritmu huwa rikorsiv. F'kull livell, tidentifika t-tip taż-żewġ valuri mqabbla:
- Jekk it-tnejn huma oġġetti assoċjattivi, tieħu l-unjoni taċ-ċwievet. Għal kull ċavetta, tinżel b'mod rikorsiv, jew timmarka miżjuda/tneħħija jekk iċ-ċavetta teżisti biss fuq naħa waħda.
- Jekk it-tnejn huma arrays ordnati, iqabbel pożizzjoni b'pożizzjoni. A differenza fil-bidu tat-tabella tista 'taqleb kull ħaġa oħra, li tipproduċi diff verbose: huwa a limitu preżunt tad-differenza strutturali naive.
- Jekk it-tipi jvarjaw (oġġett kontra firxa, skalar kontra null), ikun immarkat modifikat.
- Jekk iż-żewġ valuri huma skalari (sekwenza, numru, boolean, null), sempliċi paragun strett huwa biżżejjed.
L-ordni taċ-ċwievet f'oġġett ma jimpurtax: {"a": 1, "b": 2} u {"b": 2, "a": 1}
tipproduċi diff vojta. Dan jikkonforma mas-semantika JSON, fejn l-ordni mhix sinifikanti. Fil
Madankollu, l-ordni ta 'l-elementi ta' firxa hija importanti: firxa hija ordnata mill-kostruzzjoni.
Eżempju konkret
Hawn żewġ verżjonijiet ta' oġġett tal-utent:
// xellug
{
"id": 42,
"isem": "Alice",
"rwoli": ["admin", "editur"]
}
// dritt
{
"id": 42,
"isem": "Alice Martin",
"rwoli": ["admin", "telespettatur"],
"attiv": veru
}
Id-differenza tipproduċi:
$.name: modifikat,"Alice"→"Alice Martin"$.roles[1]: modifikat,"editur"→"viewer"$.active: miżjud,veru
Każijiet ta' użu
- Ambjenti differenti: qabbel l-output ta’ endpoint fil-preproduzzjoni u fil- produzzjoni. Utli ħafna waqt migrazzjoni jew aġġornament tal-cache.
- Verifika tal-migrazzjoni: qabbel esportazzjoni qabel u wara t-trasformazzjoni biex tiċċekkja li l-ebda għelieqi ma ntilfu.
- Rgressjoni API: qabel u wara bidla, qabbel ir-rispons għal a mistoqsija identika. Diff vojt jikkonferma li ma jkunx hemm rigressjoni.
- Sinkronizzazzjoni tal-konfigurazzjoni: qabbel
composer.jsonbejn tnejn fergħat, żewġ fajls.eslintrc, żewġ konfigurazzjonijiet Symfony. - Testijiet ta' snapshot: ibdel paragun minn linja għal linja ma' paragun strutturali f'suite ta' test ta' integrazzjoni.
Limiti ta' differenza strutturali
It-tqabbil ta 'arrays ordnati huwa limitazzjoni magħrufa ta' diffs strutturali naive. Jekk indaħħlu a element fil-bidu tal-firxa, il-pożizzjonijiet sussegwenti kollha huma mċaqalqa u d-diff sinjal kull devjazzjoni bħala modifika. Għal każijiet bħal dawn, jeżistu algoritmi aktar avvanzati (Myers, Patience, diff b'ċavetta naturali), iżda jmorru lil hinn mill-ambitu ta 'għodda ġenerali ta' tqabbil.
Id-diff ukoll ma jgħidx għaliex seħħet bidla: hija osservazzjoni. Biex tanalizza a rigressjoni, din l-osservazzjoni għandha tkun inkroreferita mal-impenji, l-iskjeramenti u l-parametri tal- mistoqsija.
Diff JSON vs Garża JSON (RFC 6902)
Format kumplimentari huwa JSON Garża (RFC 6902). Jiddeskrivi, fil-forma ta 'operazzjonijiet
(żid, neħħi, ibdel, ċaqlaq, kopja,
test), kif tittrasforma dokument JSON wieħed f'ieħor. Fejn id-differenza tagħna hija osservazzjoni
(uman), JSON Garża hija riċetta (magna). Iż-żewġ rappreżentazzjonijiet huma ekwivalenti għal
każijiet sempliċi, u JSON Patch huwa utli għal RESTful APIs li jaċċettaw modifiki
parzjali.
Mistoqsijiet frekwenti
Id-differenza tiddependi fuq l-ordni taċ-ċavetta?
Le: għal oġġett JSON, l-ordni mhix sinifikanti. Il-komparatur jipproduċi l-istess riżultat bħal iċ-ċwievet huma magħżula jew le.
Kif timmaniġġja tabelli li l-ordni tagħhom mhix importanti?
L-għodda tqis arrays bħala ordnati awtomatikament (din hija semantika JSON). Jekk tikkura settijiet, issortja ż-żewġ matriċi b'ċavetta naturali qabel ma tqabbel, jew uża servizz għodda speċjalizzata ta’ tqabbil li tqis din is-semantika.
X'inhi d-differenza ma' Git diff?
Git tqabbel linji ta 'test. Jekk l-indentazzjoni jew l-ordni taċ-ċavetta tvarja, id-diff tal-Git huwa ħafna verbose. Id-diff JSON jaħdem fuq l-istruttura parsed u jirrapporta biss il-lakuni fid-dejta.
JSON invalidu huwa aċċettat?
Le: jekk wieħed miż-żewġ JSONs ma parse, l-għodda tirritorna żball. Ivvalida l-ewwel ma tagħna Validatur JSON.
Eżempju ta' talba
curl -X POST https://cdrn.fr/api/v1/tools/json-diff/execute \
-H "Content-Type: application/json" \
-d '{"left":"...","right":"..."}'
Skema ta' input
| Kamp | Tip | Meħtieġ | Default |
|---|---|---|---|
left |
text | ✓ | – |
right |
text | ✓ | – |
Endpoints
GET https://cdrn.fr/api/v1/tools- telenka l-għodod kollha disponibbliGET https://cdrn.fr/api/v1/tools/json-diff- tikseb l-iskema ta' din l-għoddaPOST https://cdrn.fr/api/v1/tools/json-diff/execute- teżegwixxi din l-għodda b'payload JSON