Ugrás a tartalomra

JSON Összehasonlító Eszköz - JSON Online Összehasonlítás Ingyenesen | JSON Diff

Hasonlítsa össze a JSON-t online ingyenesen gyors JSON összehasonlító eszközünkkel. Találja meg a különbségeket azonnal színkódolt eredményekkel. 100%-ban biztonságos, böngészőalapú JSON diff. Nem szükséges regisztráció.

JSON Összehasonlító Eszköz

Betöltési kalkulátor...
📚

Dokumentáció

A JSON-összehasonlító eszköz, amelyet gyakran JSON-diffeszköznek is neveznek, két JSON- (JavaScript Object Notation-) értéket hasonlít össze, és jelzi, mi változott közöttük. Felsorolja az összes hozzáadott, eltávolított vagy módosított tulajdonságot és tömbelemet, valamint azok pontos helyét az adatokban. Ez az oldal példákon keresztül ismerteti, hogyan működik a whiz.tools JSON-összehasonlító eszköze a tényleges összehasonlítási logikája alapján.

Mi a JSON-összehasonlítás?

A JSON-összehasonlítás két JSON-dokumentum egymással való összevetésének folyamata, amelynek célja az eltérések megtalálása. A JSON-dokumentum kapcsos zárójelek közé zárt kulcs-érték párokból álló objektumokból, szögletes zárójelek közötti rendezett listákból álló tömbökből és primitív értékekből, például karakterláncokból, számokból, logikai értékekből és nullértékből álló szöveg. Néhány sornál hosszabb dokumentumok esetén ezek szemmel történő összehasonlítása lassú és hibalehetőségekkel teli, ezért az összehasonlító eszköz automatikusan elvégzi a párosítást, és kiemeli az egyes változásokat.

A fejlesztők ilyen összehasonlítással ellenőrzik az API-válaszokat, követik a konfigurációs fájlok változásait, megbizonyosodnak arról, hogy egy adatmigráció nem vesztett információt, és áttekintik a verziókövetésben szereplő JSON-fájlok módosításait.

Hogyan hasonlít össze az eszköz két JSON-értéket?

Az eszköz mindkét bemenetet szabványos JSON-elemzővel dolgozza fel, majd végigjárja az így kapott két értéket, szintenként haladva. Minden lépésben, sorrendben, három kérdést tesz fel:

  1. A két érték típusa különbözik (például az egyik objektum, a másik pedig szám), vagy az egyik null, a másik pedig nem? Ha igen, az adott helyen módosítást rögzít, és nem hasonlítja össze mélyebben az értékeket.
  2. Mindkét érték primitív (karakterlánc, szám, logikai érték vagy nullérték)? Ha igen, közvetlenül összehasonlítja őket. Minden eltérés módosításnak számít, beleértve a 123 számról "123" karakterláncra való váltást is.
  3. Mindkét érték objektum, vagy mindkettő tömb? Ha igen, az alábbi szabályok szerint összehasonlítja a tartalmukat, és rekurzívan feldolgozza a beágyazott objektumokat és tömböket.

Minden eltérést elérési úttal rögzít, például user.address.city vagy tags[1], így könnyű megtalálni az eredeti dokumentumban. Az objektumok tagjait ponttal kapcsolja össze, a tömbelemeket pedig szögletes zárójelben szereplő indexszel jelöli. A dokumentum legfelső szintjén bekövetkező eltérésnek, például amikor egy tömböt objektum vált fel, nincs adaton belüli elérési útja, ezért $ jelölést kap. Ez az RFC 9535, a JSONPath szabványa által meghatározott gyökérazonosító, amely a teljes dokumentumot jelöli.

Objektumok összehasonlítása

Két JSON-objektum esetén az eszköz összegyűjt minden kulcsot, amely a két objektum bármelyikében szerepel. Ezután minden kulcsnál:

  • Ha a kulcs csak a második objektumban létezik, akkor az hozzáadott tulajdonság.
  • Ha a kulcs csak az első objektumban létezik, akkor az eltávolított tulajdonság.
  • Ha a kulcs mindkettőben létezik, az eszköz rekurzívan összehasonlítja a két értéket.

A kulcsok sorrendje nem számít. A JSON-szabvány nem határozza meg az objektumtagok sorrendjét, ezért a {"a":1,"b":2} és a {"b":2,"a":1} azonosnak számít.

Tömbök összehasonlítása

A tömböket pozíció, nem pedig tartalom szerint hasonlítja össze. Az eszköz indexről indexre végighalad mindkét tömbön, és a hosszabb tömb hosszáig összeveti az egyes indexeken található értékeket. Ha az egyik tömb rövidebb, a hosszabb tömb végén található többletelemeket hozzáadottként vagy eltávolítottként jelzi.

Ez azt jelenti, hogy az eszköz soha nem próbálja tartalmuk alapján párosítani a tömbelemeket. Nem veszi észre, hogy egy objektum az 1-es indexről a 2-es indexre „került”; csak azt látja, hogy az egyes indexeken lévő érték megváltozott. Egy tömbelem középen történő törlése vagy beszúrása minden utána következő elemet eggyel arrébb tol, ezért ez rendszerint több külön módosításként jelenik meg, nem pedig egyetlen egyértelmű hozzáadásként vagy eltávolításként.

Kidolgozott példa

1. példa: két objektum összehasonlítása

Első JSON:

1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2

Második JSON:

1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2

Eredmény:

  • Módosítva: user.address.city: "New York" → "Boston"
  • Módosítva: user.address.zip: "10001" → "02108"

2. példa: a tömb végén bekövetkező változás

Első JSON:

1{ "tags": ["important", "urgent", "review"] }
2

Második JSON:

1{ "tags": ["important", "critical", "review", "documentation"] }
2

A 0 index változatlan, a 1 index megváltozott, a 2 index változatlan, a 3 index pedig csak a második tömbben létezik. Eredmény:

  • Módosítva: tags[1]: "urgent" → "critical"
  • Hozzáadva: tags[3]: "documentation"

3. példa: egy elem eltávolítása a tömb közepéről

Ez a példa azt mutatja be, mi történik, amikor egy elemet eltávolítanak egy tömb közepéről, mivel ez gyakran okoz félreértést.

Első JSON:

1{
2  "products": [
3    { "id": 1, "name": "Laptop", "price": 999.99 },
4    { "id": 2, "name": "Mouse", "price": 24.99 },
5    { "id": 3, "name": "Keyboard", "price": 59.99 }
6  ]
7}
8

Második JSON, amelyből törölték a „Mouse” bejegyzést, és amelynek végére hozzáadták a „Monitor” bejegyzést:

1{
2  "products": [
3    { "id": 1, "name": "Laptop", "price": 899.99 },
4    { "id": 3, "name": "Keyboard", "price": 59.99 },
5    { "id": 4, "name": "Monitor", "price": 349.99 }
6  ]
7}
8

Aki ezt megnézi, azt mondaná: „A Mouse eltávolítva, a Monitor hozzáadva.” Mivel az eszköz szigorúan index szerint hasonlít össze, nem ezt látja. A 0 indexet a 0 indexszel, a 1 indexet a 1 indexszel, a 2 indexet pedig a 2 indexszel hasonlítja össze, így a törölt elem után minden mező a nem megfelelő objektummal kerül párba. A tényleges eredmény hét módosítás:

  • Módosítva: products[0].price: 999.99 → 899.99
  • Módosítva: products[1].id: 2 → 3
  • Módosítva: products[1].name: "Mouse" → "Keyboard"
  • Módosítva: products[1].price: 24.99 → 59.99
  • Módosítva: products[2].id: 3 → 4
  • Módosítva: products[2].name: "Keyboard" → "Monitor"
  • Módosítva: products[2].price: 59.99 → 349.99

Az ilyen listák összehasonlításakor tisztább eredmény érhető el, ha beillesztés előtt mindkét tömböt ugyanúgy rendezi vagy ugyanazzal a kulccsal látja el, például ha mindkét listát ugyanabban a sorrendben írja meg, vagy összehasonlítás előtt azonosítómező alapján párosítja az objektumokat.

Amit az eszköz nem végez el

  • Nem párosítja a tömbelemeket tartalmuk alapján. A fentiek szerint kizárólag indexpozíció alapján hasonlít össze, ezért nem tudja felismerni, ha egy elem elmozdult, nem pedig megváltozott.
  • Nem észleli a körkörös hivatkozásokat. Ez a gyakorlatban nem korlátozás: mindkét bemenet a JSON.parse függvényből származik, amely mindig egyszerű fát épít, és soha nem hozhat létre önmagára visszahivatkozó értéket. Érvényes JSON-szövegben eleve nem lehetnek körkörös hivatkozások.
  • Nem kínál beállítást a tömbök összehasonlítás előtti rendezésére. A bemenet elemeinek beillesztés előtti átrendezése az egyetlen módja a fent leírt indexeltolódási hatás elkerülésének.

Az eszköz használata

  1. Illessze be az első JSON-dokumentumot a bal oldali mezőbe, a másodikat pedig a jobb oldaliba.
  2. Az eszköz automatikusan összehasonlítja őket, amint mindkét mező szöveget tartalmaz, vagy kattintson az Összehasonlítás gombra a kézi futtatáshoz.
  3. Olvassa el az eredménylistát. Minden sor egy elérési utat, például user.age, valamint azt mutatja, hogy az értéket hozzáadták, eltávolították vagy módosították; a régi és az új érték egymás mellett jelenik meg.
  4. Kattintson a Másolás gombra az eredmények egyszerű szövegként történő másolásához.

Ha egy mező érvénytelen JSON-szöveget tartalmaz, az eszköz összehasonlítás helyett hibaüzenetet jelenít meg a mező alatt. Ha mindkét mező érvénytelen, mindkét hiba egyszerre jelenik meg.

Gyakran ismételt kérdések

Mi számít eltérésnek két JSON-érték között? Egy tulajdonság vagy tömbelem akkor különbözik, ha csak a két dokumentum egyikében létezik, vagy ha mindkettőben létezik, de eltérő értéket vagy típust tartalmaz. Az 5 számról "5" karakterláncra váltás módosításnak számít, még akkor is, ha hasonlónak tűnnek.

Számít az elemek sorrendje? A tárolótól függ. A JSON-objektumok tagjainak sorrendje nincs meghatározva, ezért az azonos kulcsokat és értékeket eltérő sorrendben tartalmazó két objektum azonosnak számít. A tömbök rendezettek, és az eszköz indexpozíció alapján hasonlítja össze őket, ezért egy elem másik pozícióba helyezése áthelyezés helyett módosítások sorozataként jelenik meg.

Mit jelent az $ eredményút? A teljes dokumentum változott meg, nem annak egy része. Ez akkor történik, amikor a két bemenet legfelső szintű értéke eltérő típusú, például az egyik oldalon tömb, a másikon objektum található, vagy a két egyszerű szám 1 és 2 szerepel. A $ az RFC 9535, a JSONPath szabványa szerinti gyökérazonosító.

Elküldi az eszköz a JSON-adataimat egy szerverre? Nem. Az összehasonlítás JavaScript használatával, a böngészőben történik. Semmi nem kerül feltöltésre.

Befolyásolja-e az eredményt a formázás, például a behúzás vagy a tömörítés? Nem. Az összehasonlítás előtt mindkét bemenetet JSON-értékekké dolgozza fel, ezért a szóközök, a behúzás és a sortörések nem számítanak. Csak a tényleges adatokat hasonlítja össze.

Össze tudja hasonlítani az eszköz a megjegyzéseket vagy záró vesszőket tartalmazó JSON-t? Nem. Az RFC 8259 szabványban meghatározott szabványos JSON nem engedélyezi a megjegyzéseket és a záró vesszőket. Az ilyen elemeket tartalmazó bemenetet érvénytelenként elutasítja.

Hivatkozások

  1. IETF. „A JavaScript Object Notation (JSON) adatcsere-formátuma.” RFC 8259, 2017. december.
  2. IETF. „JavaScript Object Notation (JSON) javítás.” RFC 6902, 2013. április.
  3. IETF. „JSONPath: lekérdezési kifejezések JSON-hoz.” RFC 9535, 2024. február. (A 2,2 szakasz a $ gyökérazonosítót határozza meg.)
  4. Mozilla Developer Network. „JSON.parse().”