JSON Алат за Поређење - Упоредите JSON Онлајн Бесплатно | JSON Разлике
Упоредите JSON онлајн бесплатно помоћу нашег брзог алата за поређење JSON-а. Пронађите разлике тренутно уз резултате обојене бојама. 100% сигурно, JSON diff у прегледачу. Без потребе за регистрацијом.
JSON Diff Алат
Dokumentacija
Алат за поређење JSON-а, који се често назива алатом за поређење JSON-а, пореди две вредности у формату JSON (JavaScript Object Notation) и приказује шта се између њих променило. Наводи свако својство или ставку низа која је додата, уклоњена или измењена, заједно са њеном тачном локацијом у подацима. Ова страница објашњава како ради алат за поређење JSON-а whiz.tools, уз практичне примере засноване на његовој стварној логици поређења.
Шта је поређење JSON-а?
Поређење JSON-а је поступак провере два JSON документа ради проналажења разлика. JSON документ је део текста изграђен од објеката (парова кључ-вредност у витичастим заградама), низова (уређених листа у угластим заградама) и примитивних вредности, као што су стрингови, бројеви, логичке вредности и null. Ручно поређење ова два документа постаје споро и подложно грешкама када пређу неколико редова, па алат за поређење аутоматски упарује вредности и истиче сваку промену.
Програмери користе ову врсту поређења за проверу одговора API-ја, праћење промена у конфигурационим датотекама, проверу да ли је миграција података довела до губитка информација и преглед промена у JSON датотекама у систему за контролу верзија.
Како алат пореди две JSON вредности
Алат рашчлањује оба улаза стандардним JSON парсером, а затим пролази кроз две добијене вредности истовремено, ниво по ниво. На сваком кораку поставља три питања, следећим редом:
- Да ли две вредности имају различите типове (на пример, једна је објекат, а друга број), или је једна
null, а друга није? Ако је тако, бележи измену на том месту и прекида даље поређење. - Да ли су обе вредности примитивне (стринг, број, логичка вредност или null)? Ако јесу, пореди их непосредно. Свака разлика, укључујући промену броја
123у стринг"123", рачуна се као измена. - Да ли су обе вредности објекти или су обе низови? Ако јесу, пореди њихов садржај према правилима у наставку и рекурзивно пореди све угнежђене објекте или низове.
Свака разлика се бележи путањом, као што су user.address.city или tags[1], па се лако може пронаћи у изворном документу. Чланови објекта повезују се тачком, а ставке низа приказују се индексом у угластим заградама. Разлика на самом врху документа, као што је замена низа објектом, нема путању унутар података, па се означава са $. То је идентификатор корена дефинисан стандардом JSONPath у RFC-у 9535 и означава цео документ.
Поређење објеката
Када пореди два JSON објекта, алат прикупља сваки кључ који се појављује у било ком од њих. За сваки кључ:
- Ако кључ постоји само у другом објекту, то је додато својство.
- Ако кључ постоји само у првом објекту, то је уклоњено својство.
- Ако кључ постоји у оба објекта, алат рекурзивно пореди две вредности.
Редослед кључева није важан. JSON стандард не дефинише редослед чланова објекта, па се {"a":1,"b":2} и {"b":2,"a":1} сматрају истоветним.
Поређење низова
Низови се пореде по позицији, а не по садржају. Алат пролази кроз оба низа индекс по индекс и пореди оно што се налази на сваком индексу, све до дужине дужег низа. Ако је један низ краћи, додатне ставке на крају дужег низа пријављују се као додате или уклоњене.
То значи да алат никада не покушава да упари ставке низа на основу њиховог садржаја. Не уочава да је објекат „премештен“ са индекса 1 на индекс 2; види само да се вредност на сваком индексу променила. Брисање или уметање ставке у средину низа помера сваку наредну ставку за једну позицију, па се обично приказује као више засебних измена, а не као једно јасно додавање или уклањање.
Решени пример
Пример 1: поређење два објекта
Први JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Други JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Резултат:
- Измењено
user.address.city:"New York"→"Boston" - Измењено
user.address.zip:"10001"→"02108"
Пример 2: промена низа на крају
Први JSON:
1{ "tags": ["important", "urgent", "review"] }
2Други JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Индекс 0 није промењен, индекс 1 је промењен, индекс 2 није промењен, а индекс 3 постоји само у другом низу. Резултат:
- Измењено
tags[1]:"urgent"→"critical" - Додато
tags[3]:"documentation"
Пример 3: уклањање ставке из средине низа
Овај пример приказује шта се дешава када се ставка уклони из средине низа, јер је то чест извор забуне.
Први 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Други JSON, са обрисаном ставком „Mouse“ и додатом ставком „Monitor“ на крају:
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Особа која ово посматра рекла би: „Mouse је уклоњен, а Monitor је додат.“ Пошто алат строго пореди по индексу, он то не види на тај начин. Поређење врши између индекса 0 и 0, индекса 1 и 1, као и индекса 2 и 2, па се свако поље после обрисане ставке упоређује са погрешним објектом. Стварни резултат је седам измена:
- Измењено
products[0].price:999.99→899.99 - Измењено
products[1].id:2→3 - Измењено
products[1].name:"Mouse"→"Keyboard" - Измењено
products[1].price:24.99→59.99 - Измењено
products[2].id:3→4 - Измењено
products[2].name:"Keyboard"→"Monitor" - Измењено
products[2].price:59.99→349.99
Да би резултат поређења оваквих листа био прегледнији, сортирајте оба низа или им задајте кључеве на исти начин пре него што их налепите, на пример тако што ћете сваку листу написати истим редоследом или упарити објекте према пољу са идентификатором пре поређења.
Шта алат не ради
- Не упарује ставке низа на основу садржаја. Као што је приказано изнад, пореди их искључиво према позицији индекса, па не може да препозна да је ставка премештена, а не измењена.
- Не открива кружне референце. Ово у пракси није ограничење: оба улаза потичу од
JSON.parse, који увек гради једноставну стабласту структуру и никада не може да произведе вредност која упућује на саму себе. Кружне референце не могу постојати у важећем JSON тексту. - Не нуди подешавање за сортирање низова пре поређења. Преуређивање ставки у улазу пре њиховог лепљења једини је начин да се избегне горе описани ефекат померања индекса.
Како се користи алатка
- Налепите први JSON документ у лево поље, а други у десно.
- Алат их аутоматски пореди чим оба поља садрже текст; можете и да кликнете на „Compare“ да бисте поређење покренули ручно.
- Прочитајте листу резултата. Сваки ред приказује путању, као што је
user.age, и наводи да ли је вредност додата, уклоњена или измењена, при чему су стара и нова вредност приказане једна поред друге. - Кликните на „Copy“ да бисте резултате копирали као обичан текст.
Ако поље садржи текст који није важећи JSON, алат испод тог поља приказује грешку уместо резултата поређења. Када су оба поља неважећа, обе грешке се појављују истовремено.
Најчешће постављана питања
Шта се сматра разликом између две JSON вредности?
Својство или ставка низа разликује се ако постоји само у једном од два документа или ако постоји у оба, али садржи другу вредност или има други тип. Промена вредности из броја 5 у ниску "5" рачуна се као измена, иако могу изгледати слично.
Да ли је редослед ставки важан? Зависи од контејнера. JSON објекти немају дефинисан редослед чланова, па се два објекта са истим кључевима и вредностима у другачијем редоследу сматрају истоветним. Низови су уређени, а алат их пореди по позицији индекса, па се премештање ставке на другу позицију приказује као низ измена, а не као премештање.
Шта значи путања резултата $?
То значи да се променио цео документ, а не само његов део. То се дешава када су два улаза на највишем нивоу различите врсте вредности, на пример када је на једној страни низ, а на другој објекат, или када су у питању бројеви 1 и 2. $ је идентификатор корена из RFC-а 9535, стандарда JSONPath.
Да ли се моји JSON подаци шаљу на сервер? Не. Поређење се извршава у прегледачу помоћу JavaScript-а. Ништа се не отпрема.
Да ли обликовање, као што су увлачење или минимизација, утиче на резултат? Не. Оба улаза се пре поређења рашчлањују у JSON вредности, па размаци, увлачење и преломи редова не утичу на резултат. Пореде се само стварни подаци.
Да ли алат може да пореди JSON са коментарима или зарезима на крају? Не. Стандардни JSON, како је дефинисан у RFC-у 8259, не дозвољава коментаре ни зарезе на крају. Улаз који их садржи одбацује се као неважећи.
Референце
- IETF. „Формат за размену података JavaScript Object Notation (JSON).“ RFC 8259, децембар 2017.
- IETF. „JavaScript Object Notation (JSON) Patch.“ RFC 6902, април 2013.
- IETF. „JSONPath: упитни изрази за JSON.“ RFC 9535, фебруар 2024. (Одељак 2,2 дефинише идентификатор корена
$.) - Mozilla Developer Network. „JSON.parse().“