В чем разница между JSON.dump () и json.dumps () в python?



Я искал в этой официальный документ, чтобы найти разницу между json.dump () и json.dumps () в python. Понятно, что они связаны с возможностью записи файла.
но какова детальная разница между ними и в каких ситуациях один имеет больше преимуществ, чем другие?

889   3  

3 ответов:

нет почти ничего другого, чтобы добавить, кроме того, что говорят документы, если вы хотите сбросить JSON в файл / сокет или что-то еще, тогда вы должны пойти на dump(). Если вам это нужно только как строка (для печати, разбора или что-то еще), то используйте dumps() (строка дампа)

как отметил Антии Хаапала в этом ответе, есть некоторые незначительные различия на ensure_ascii поведение, это в основном из-за того, как основной write() функция работает, то работает на куски, а не на всю строку, проверьте ответ для получения более подробной информации об этом.

json.dump()

сериализовать obj как JSON-форматированный поток в fp (a .записать()-вспомогательная файл-как объект

если ensure_ascii имеет значение False, некоторые фрагменты, записанные в fp, могут быть экземплярами unicode

json.dumps()

сериализовать obj в формате JSON str

если ensure_ascii является ложным, результат может содержат символы, отличные от ASCII, и возвращаемое значение может быть экземпляром unicode

функции с s принять параметры строки. Остальные берут файл потоки.

одна заметная разница в Python 2 если вы используете ensure_ascii=False,dump правильно запишет кодированные данные UTF-8 в файл (если вы не использовали 8-битные строки с расширенными символами, которые не являются UTF-8):

dumps С другой стороны, с ensure_ascii=False произвести str или unicode просто в зависимости от того, какие типы вы использовали для строк:

сериализовать obj в форматированный JSON str с помощью этой таблицы преобразования. Если ensure_ascii имеет значение False, результат может содержать символы, отличные от ASCII, и возвращаемое значение может быть unicode экземпляр.

(выделено мной). Обратите внимание, что это все еще может быть str экземпляра.

таким образом, вы не можете использовать его возвращаемое значение для сохранения структуры в файл без проверки которого формат был возвращен и, возможно, играл с unicode.encode.

это, конечно, больше не является допустимым беспокойством в Python 3, так как этого больше нет 8-бит/Юникод путаница.


как load vs loads,load считает весь файл должен быть одним документом JSON, поэтому вы не можете использовать его для чтения нескольких документов JSON с ограниченной новой строкой из одного файла.

Comments

    Ничего не найдено.