2013-08-22 4 views
2

Я загружаю JSON при загрузке веб-страницы и изменен посредством действий пользователя в клиенте. Когда пользователь перемещается, хотите увидеть, изменился ли JSON или нет. Вместо сравнения значений один за другим внутри JSON является любой способ сделать хэш-строку и сравнить в целом в JavaScript?Как проверить, изменился ли JSON в Javascript?

+0

Кто генерирует два JSON? (старый и новый) генерируются кодом JS? – xanatos

+1

Поскольку JSON - это действительно просто строка в JS, вы можете просто сравнить финальную строку с исходной строкой. Однако, если вы разбираете JSON между ними, измените объект и затем преобразуете объект обратно в JSON, нет гарантии, что свойства будут указаны в том же порядке. Но разбор исходной строки JSON и преобразование объекта обратно в JSON с JS должен обойти эту проблему. –

+0

@xanatos One возвращается с сервера и загружается, когда пользователь работает в приложении, JSON будет обновляться время от времени. – Nishanthan

ответ

5

Попробуйте использовать строгие версии данных

Ex.

JSON.stringify(orig) == JSON.stringify(current) 

Примечания: в этом случае вы должны держать глубокую копию оригинального JSON или строковую версию этого, также есть возможность ложных срабатываний, так как порядок ключей может переодеться.

Для браузеров, которые не поддерживают родной JSON, вам, возможно, придется использовать библиотеку, такую ​​как json2.

+2

* «порядок ключей может измениться» * Я думаю, что это может произойти только в том случае, если исходный JSON генерируется где-то в другом месте, например. скрипт PHP. Вызов 'JSON.stringify' на одни и те же данные должен давать одинаковый результат каждый раз. Связано: http://stackoverflow.com/questions/8931967/is-there-a-deterministic-equivalent-of-json-stringify. Я надеюсь, что MDN относится к различиям между двигателями, тот же движок всегда должен давать одинаковый результат. –

5

И есть еще один способ:

назначить два JSON к двум объектам, а и б. Теперь вы можете сравнить deep-equal с помощью underscorejs или lodash функций.

_.isEqual(a, b) 
Смежные вопросы