Pythonでjson.dump()とjson.dumps()の違いを見つけるために this 公式ドキュメントを検索しました。それらがファイル書き込みオプションに関連していることは明らかです。
[。
ドキュメントが言うこと以外に追加することはほとんどありません。 JSONをファイル/ソケットなどにダンプする場合は、dump()
を使用する必要があります。文字列としてのみ必要な場合(印刷、解析など)、dumps()
(ダンプ文字列)を使用します
この回答のAntii Haapala で述べたように、ensure_ascii
の動作には若干の違いがあります。これは主に、基礎となるwrite()
関数の動作方法によるもので、文字列全体ではなくチャンクに作用します。詳細については、回答を確認してください。
json.dump()
ObjをJSON形式のfp(.write()をサポートするファイルのようなオブジェクトへのストリーム)としてシリアル化します
Ensure_asciiがFalseの場合、fpに書き込まれる一部のチャンクはUnicodeインスタンスである可能性があります
json.dumps()
ObjをJSON形式のstrにシリアル化します
Ensure_asciiがFalseの場合、結果には非ASCII文字が含まれる場合があり、戻り値はUnicodeインスタンスになる場合があります
s
を持つ関数は文字列パラメーターを取ります。その他はファイルストリームを取得します。
Python 2の顕著な違いの1つは、ensure_ascii=False
を使用している場合、dump
がUTF-8エンコードデータをファイルに適切に書き込むことです(UTF- 8):
一方、dumps
では、ensure_ascii=False
を使用すると、文字列に使用したタイプに応じてstr
またはunicode
を生成できます。
この変換テーブルを使用して、objをJSON形式のstrにシリアル化します。 ensure_asciiがFalseの場合、結果には非ASCII文字と戻り値
unicode
インスタンスの可能性がありますが含まれる場合があります。
(エンファシス鉱山)。まだstr
インスタンスでもあることに注意してください。
したがって、戻り値を使用して、返された形式を確認し、場合によってはunicode.encode
で再生せずに、構造をファイルに保存することはできません。
もちろん、これはPython 3の有効な関心事ではありません。これは、この8ビット/ Unicodeの混乱がなくなったためです。
load
対loads
に関しては、load
はwholeファイルを1つのJSONドキュメントと見なします。そのため、単一のファイルから複数の改行制限JSONドキュメントを読み取ることはできません。
メモリ使用量と速度。
jsonstr = json.dumps(mydata)
を呼び出すと、最初にメモリにデータの完全なコピーが作成され、それからfile.write(jsonstr)
ディスクに作成されます。したがって、これはより高速な方法ですが、保存するデータが大量にある場合は問題になる可能性があります。
json.dump(mydata, file)
-'s'なしで呼び出すと、データはチャンクによってダンプされるため、新しいメモリは使用されません。しかし、プロセス全体は約2倍遅くなります。
ソース:json.dump()
およびjson.dumps()
のソースコードをチェックし、time.time()
で時間を測定し、htopでメモリ使用量を監視する両方のバリアントもテストしました。