py/objdict: Support ujson.dump() of OrderedDict objects.

Following CPython, OrderedDict are dumped with the syntax of dict.
This commit is contained in:
Andrew Leech 2019-11-11 15:44:04 +11:00 committed by Damien George
parent 82d358510b
commit 1e87f11d3f
2 changed files with 14 additions and 2 deletions

View File

@ -60,7 +60,7 @@ STATIC void dict_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_
if (!(MICROPY_PY_UJSON && kind == PRINT_JSON)) { if (!(MICROPY_PY_UJSON && kind == PRINT_JSON)) {
kind = PRINT_REPR; kind = PRINT_REPR;
} }
if (MICROPY_PY_COLLECTIONS_ORDEREDDICT && self->base.type != &mp_type_dict) { if (MICROPY_PY_COLLECTIONS_ORDEREDDICT && self->base.type != &mp_type_dict && kind != PRINT_JSON) {
mp_printf(print, "%q(", self->base.type->name); mp_printf(print, "%q(", self->base.type->name);
} }
mp_print_str(print, "{"); mp_print_str(print, "{");
@ -83,7 +83,7 @@ STATIC void dict_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_
mp_obj_print_helper(print, next->value, kind); mp_obj_print_helper(print, next->value, kind);
} }
mp_print_str(print, "}"); mp_print_str(print, "}");
if (MICROPY_PY_COLLECTIONS_ORDEREDDICT && self->base.type != &mp_type_dict) { if (MICROPY_PY_COLLECTIONS_ORDEREDDICT && self->base.type != &mp_type_dict && kind != PRINT_JSON) {
mp_print_str(print, ")"); mp_print_str(print, ")");
} }
} }

View File

@ -0,0 +1,12 @@
try:
import ujson as json
from ucollections import OrderedDict
except ImportError:
try:
import json
from collections import OrderedDict
except ImportError:
print("SKIP")
raise SystemExit
print(json.dumps(OrderedDict(((1, 2), (3, 4)))))