回答:
ドキュメントが言うこと以外に追加することはあまりありません。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
文字列パラメータを取る関数。その他はファイルストリームを受け取ります。
メモリ使用量と速度。
これを呼び出すjsonstr = json.dumps(mydata)
と、最初にメモリにデータの完全なコピーが作成され、次にfile.write(jsonstr)
ディスクにコピーされます。したがって、これはより高速な方法ですが、保存するデータが大きい場合は問題になる可能性があります。
json.dump(mydata, file)
「s」なしで呼び出すと、データはチャンクでダンプされるため、新しいメモリは使用されません。しかし、全体のプロセスは約2倍遅くなります。
出典:私はのソースコードを確認json.dump()
し、json.dumps()
との時間を計測する変異体の両方とも試験time.time()
やホテルトップでのメモリ使用量を見ています。
Python 2の注目すべき違いの1つは、を使用している場合ensure_ascii=False
、dump
UTF-8でエンコードされたデータをファイルに適切に書き込むことです(UTF-8以外の拡張文字を含む8ビット文字列を使用した場合を除く)。
dumps
一方、with ensure_ascii=False
は、文字列に使用したタイプに応じて、str
またはを生成できunicode
ます。
この変換テーブルを使用して、objをJSON形式のstrにシリアル化します。Ensure_asciiがFalseの場合、結果には非ASCII文字が含まれる可能性が
unicode
あり、戻り値はインスタンスになる可能性があります。
(強調鉱山)。それもstr
インスタンスである可能性があることに注意してください。
したがって、返される値を使用して、返された形式を確認し、場合によってはを使用することなく構造をファイルに保存することはできませんunicode.encode
。
もちろん、これはPython 3ではもはや有効ではありません。これは、この8ビット/ Unicodeの混乱がなくなるためです。
用としてload
対loads
、load
考えて全体のあなたは、単一のファイルから複数の改行制限JSON文書を読むためにそれを使用することはできませんので、1つのJSONドキュメントするファイルを。
json.dumps([b'123'])
-> TypeError
。