сериализация файлов JSON с символами новой строки в Python - PullRequest
4 голосов
/ 19 апреля 2010

Иногда я использую json и jsonpickle для сериализации объектов в файлы, используя следующую функцию:

def json_serialize(obj, filename, use_jsonpickle=True):
    f = open(filename, 'w')
    if use_jsonpickle:
    import jsonpickle
    json_obj = jsonpickle.encode(obj)
    f.write(json_obj)
    else:
    simplejson.dump(obj, f) 
    f.close()

Проблема в том, что если я сериализую словарь, например, используя «json_serialize (mydict, myfilename)», тогда вся сериализация будет помещена в одну строку. Это означает, что я не могу выполнить поиск файла для проверки записей вручную, как если бы я был файлом CSV. Есть ли способ сделать так, чтобы каждый элемент объекта (например, каждая запись в dict или каждый элемент в списке) помещался на отдельной строке в выходном файле JSON?

спасибо.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

Jsonpickle использует один из бэкэндов json, и вы можете попробовать это в своем коде:

jsonpickle.set_encoder_options('simplejson', sort_keys=True, indent=4)

Обновление: simplejson был включен в базовый питон, просто замените simplejson на json, и вы получите печатный / отформатированный / не минимизированный json

jsonpickle.set_encoder_options('json', sort_keys=True, indent=4)
3 голосов
/ 19 апреля 2010

(simple)json.dump() имеет аргумент indent.jsonpickle возможно, имеет что-то похожее, или в худшем случае вы можете декодировать его и закодировать снова.

...