Преобразуйте значения bool в string в json.отвал()


Я пытаюсь преобразовать python dict в json, однако API, к которому я обращаюсь, не принимает значение bool, вместо этого он использует строку "true"/"false".

Пример:

dct = { "is_open": True }
json.dumps(dct)

В настоящее время выдает вывод bool: { "is_open": true }

Но то, что я хочу, - это строчный вывод в нижнем регистре: { "is_open": "true" }

Я пробовал json.dumps(dct, cls=MyEncoder), но это не работает, только неродной объект передается в MyEncoder по умолчанию.

class MyEncoder(json.JSONEncoder):
        def default(self, o):
            if isinstance(o, bool):
                return str(o).lower()
            return super(MyEncoder, self).default(o)
Любая помощь была бы очень кстати.

(Кстати, это не мой API, к которому я обращаюсь, поэтому я не могу измените API, чтобы получить доступ к значению true false вместо Строковой альтернативы.)

1   3   2017-03-08 00:03:25

1 ответ:

Если бы это был я, я бы преобразовал структуру данных Python в требуемый формат и затем вызов json.dumps():

import json
import sys

def convert(obj):
    if isinstance(obj, bool):
        return str(obj).lower()
    if isinstance(obj, (list, tuple)):
        return [convert(item) for item in obj]
    if isinstance(obj, dict):
        return {convert(key):convert(value) for key, value in obj.items()}
    return obj

dct = {
  "is_open": True
}
print (json.dumps(dct))
print (json.dumps(convert(dct)))

Вывод:

{"is_open": true}
{"is_open": "true"}