Description
On Python 3.6+ (where dict is ordered) I'd expected the following to always return the same results:
import jsonpatch
a = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4',
'key5': {
'subkey1': 'subvalue1',
'subkey2': 'subvalue2',
'subkey3': 'subvalue3',
'subkey4': 'subvalue4',
},
}
b = {
'key1': '1234',
'key2': 'asdf',
'key3': 'value3',
'key4': 'value4',
'key5': {
'subkey1': 'subvalue1',
'subkey2': 'subvalue2',
'subkey3': 'subvalue3',
'subkey5': 'subvalue5',
},
'key6': {
'subkey1': 'subvalue1',
},
}
print(jsonpatch.JsonPatch.from_diff(a, b).patch)
This isn't the case though:
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key1', 'value': '1234'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key1', 'value': '1234'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key1', 'value': '1234'}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}]
% python3 misc/json_patch.py
[{'op': 'add', 'path': '/key6', 'value': {'subkey1': 'subvalue1'}}, {'op': 'replace', 'path': '/key2', 'value': 'asdf'}, {'op': 'remove', 'path': '/key5/subkey4'}, {'op': 'add', 'path': '/key5/subkey5', 'value': 'subvalue5'}, {'op': 'replace', 'path': '/key1', 'value': '1234'}]
Metadata
Metadata
Assignees
Labels
No labels