gh-100272: Fix JSON serialization of OrderedDict (GH-100273)

It now preserves the order of keys.
This commit is contained in:
Serhiy Storchaka 2022-12-17 14:32:48 +02:00 committed by GitHub
parent 2b38a9aa74
commit 0fe61d0838
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 4 deletions

View file

@ -1570,10 +1570,9 @@ encoder_listencode_dict(PyEncoderObject *s, _PyUnicodeWriter *writer,
*/
}
if (s->sort_keys) {
items = PyDict_Items(dct);
if (items == NULL || PyList_Sort(items) < 0)
if (s->sort_keys || !PyDict_CheckExact(dct)) {
items = PyMapping_Items(dct);
if (items == NULL || (s->sort_keys && PyList_Sort(items) < 0))
goto bail;
for (Py_ssize_t i = 0; i < PyList_GET_SIZE(items); i++) {