以下の手順で json オブジェクトをバイナリに変換してから、書き込めばよいと思います。
- json.dumps() で json オブジェクトを str に変換する。
- str.encode(エンコード形式) で str をバイナリに変換する。
python
1import json
2
3with open("sample.json", "r") as f:
4 json_dict = json.load(f)
5
6# バイナリモードでファイルに書き込み
7with open("test.dat", "wb") as f:
8 json_str = json.dumps(json_dict)
9 json_bin = json_str.encode("utf-8")
10 f.write(json_bin)
11
12# バイナリモードでファイル読み込み
13with open("test.dat", "rb") as f:
14 json_bin = f.read()
15
16print(json_bin)
追記
Python 2系と3系で文字列の扱いは大きく異るので、WEb 上の情報を参照する際はどのバージョンの話なのかをご注意ください。
Python2とPython3のstr型/unicode型/bytes型/encode/decodeの違い解説 - Qiita
Python 3では文字列は内部的に unicode で管理されている str 型で表されます。
この str をテキストにする際には、ascii や utf-8 といったエンコード方式でバイナリ化します。
open() でモードを "w" にしてエンコード方式を指定して書き込むのと、
str.encode() でバイナリにしてから、モードを "wb" にしてバイナリとして書き込むのは同じ意味です。
python
1text = "ハローワールド"
2
3with open("sample.txt", "w", encoding="utf-8") as f:
4 f.write(text)
5
6with open("sample2.txt", "wb") as f:
7 f.write(text.encode("utf-8"))
jsonは、文字なのでasciiなので、シンプルにバイナリ(byte型に変換できる)
json は ascii 以外の文字 (日本語とか) も含められるので、その場合、"utf-8" とかその文字を含む文字コードを使う必要があります。
どの文字コードでエンコードするかは利用者が決めることなので、bytes オブジェクトにしたい場合は str.encode() で明示的に変換する必要があります。
バイナリって人間が読めない形式だと思っていましたが、outputは普通に読める形式でしたが。。
テキストもバイナリです。
テキストエディタで開いたときに文字として表示されるのは、テキストエディタが文字コードを判断して、バイナリを解釈しているからです。
間違った文字コードで解釈すると、正しく文字として認識できず、文字化けが発生します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/05 06:09
2020/04/05 06:15
2020/04/05 06:22
2020/04/05 06:25
2020/04/05 08:00