2015-04-02 1 views
1

Я новичок в Json stuff i.e JSON PATCH. У меня есть сценарий, где мне нужно выяснить, между двумя версиями Json-файлов одного и того же объекта, потому что я использую json-patch-master. Но, к сожалению, созданный патч интерпретирует его по-другому, то есть порядок отличается, следовательно, получая неожиданные/недействительные результаты. Может ли кто-нибудь помочь мне сохранить заказ при создании Json Patch?Есть ли способ сохранить заказ при создании патча для json-файлов?

**Here is the actual example. 
Original Json file :** 

[ { 
    "name" : "name1", 
    "roolNo" : "1" 
}, { 
    "name" : "name2", 
    "roolNo" : "2" 
}, { 
    "name" : "name3", 
    "roolNo" : "3" 
}, { 
    "name" : "name4", 
    "roolNo" : "4" 
} ] 


**Modified/New Json file: i.e. removed 2nd node of original file.** 

[ { 
    "name" : "name1", 
    "roolNo" : "1" 
}, { 
    "name" : "name3", 
    "roolNo" : "3" 
}, { 
    "name" : "name4", 
    "roolNo" : "4" 
} ] 

**Patch/Diff Generated :** 

[ {"op":"remove","path":"/3"}, 
{"op":"replace","path":"/1/name","value":"name3"}, 
{"op":"replace","path":"/1/roolNo","value":"3"}, 
{"op":"replace","path":"/2/name","value":"name4"}, 
{"op":"replace","path":"/2/roolNo","value":"4"}] 

Very time I generate Diff/Patch it is giving different path/diff results. 
And moreover the interpretation is different i.e. order is not preserving. 

**Is there any way to get expected results i.e. [ {"op":"remove","path":"/1"} ] , in other words generated a patch/diff based some order so will get what is expected. ? 
How to handle this kind of scenario ?** 

Please help me. 

Thank you so much. 
~Shyam 
+1

Интересная проблема! Библиотека, которую я поддерживаю для поддержки (https://github.com/Starcounter-Jack/JSON-Patch), также страдает от этой проблемы: http://jsfiddle.net/warpech/1epzuoj3/. Я думаю, что это может быть исправлено для браузеров, которые изначально поддерживают «Array.observe». Но для более старых браузеров требуется дорогостоящая грязная проверка. – warpech

ответ

0

В настоящее время мы работаем над этим вопросом в Starcounter-Jack/JSON-Patch.

Кажется, славный с родным Array.Observe - http://jsfiddle.net/tomalec/p4s7aw96/.

Попробуйте Starcounter-Jack/JSON-Patch issues/65_ArrayObserve branch мы выпустим его как новую версию после того, как будут проверены прокладка и производительность.

Вы можете добавить свой коментарий в JSON-Patch issue board

+0

спасибо. Вероятно, мой вопрос имеет некоторую двусмысленность, позвольте мне сказать правильно. Когда я создаю diff/patch, он показывает, что один узел удален, а также показывая, что некоторые другие узлы заменяются, на самом деле я удалил только один узел. Это происходит потому, что патч не в состоянии сохранить или поддерживать порядок узлов ..... поэтому мне нужно каким-то образом позволить патчу генерировать diff в определенном порядке, чтобы результаты пришли правильно. – user3252097

+0

@ user3252097, это в настоящее время выполняется, пожалуйста, проверьте http://jsfiddle.net/tomalec/p4s7aw96/ repo здесь https://github.com/tomalec/JSON-Patch/tree/issues/65_ArrayObserve_shim К сожалению, это не смог заставить его работать с shimmed 'Array.observe', поэтому он по-прежнему требует поддержки со стороны. – tomalec