はじめに
テキストファイルの読み込みモジュールについて「Pythonのテキストファイル読み込みモジュールの比較」を書きました。
jsonファイルの読み込みモジュールも同様で、使用するたびに調べていたので、
同様に書き残します。
環境
- OS :CentOS Linux release 7.6.1810 (Core)
- Python:Python 3.7.5
4つのモジュール
Pythonでjsonを扱うときに使用されるモジュールは、下記の4つです。
モジュール名 | 説明 |
---|---|
json.load() | jsonファイルを読み込み、dict型にする(引数は、ファイルオブジェクト) |
json.loads() | jsonテキスト(str型)をdict型にする(引数は、str型) |
json.dump() | dict型をjsonファイルに保存する(引数は、ファイルオブジェクトとdict型) |
json.dumps() | dict型をstr型のjsonに整形する(引数は、dict型) |
テスト用のファイル
下記ファイルを読み込み用として作成します。
{
"aaa": "1111",
"bbb": "2222",
"ccc": {
"ddd": "333",
"eee": "444",
"fff": "555"
}
}
json.load()のテストコード
jsonファイルを読み込むテストコードです。
#!/usr/bin/env python
import json
FILENAME="file.json"
fd = open(FILENAME, mode='r')
data = json.load(fd)
fd.close()
print("date : ", type(data))
print(data)
実行して、結果を表示します。
$ ./testload.py
date : <class 'dict'>
{'aaa': '1111', 'bbb': '2222', 'ccc': {'ddd': '333', 'eee': '444', 'fff': '555'}}
ファイルを読み込んでdict型になっています。
json.loads() テストコード
str型変数のjsonテキストを読み込みむテストコードです。
#!/usr/bin/env python
import json
WORD='{"aaa": "1111", "bbb": "2222", "ccc": { "ddd": "333", "eee": "444", "fff": "555" }}'
print("WORD : ", type(WORD))
data = json.loads(WORD)
print("data : ", type(data))
print(data)
実行して、結果を表示します。
$ ./testlocads.py
WORD : <class 'str'>
data : <class 'dict'>
{'aaa': '1111', 'bbb': '2222', 'ccc': {'ddd': '333', 'eee': '444', 'fff': '555'}}
str型のjson(WORD変数)を読み込んで、dict型(data変数)に格納しています。
json.dump()のテストコード
dict型変数のjsonテキストをファイルに保存するテストコードです。
#!/usr/bin/env python
import json
FILENAME="file_write.json"
WORD='{"aaa": "1111", "bbb": "2222", "ccc": { "ddd": "333", "eee": "444", "fff": "555" }}'
print("WORD : ", type(WORD))
fd = open(FILENAME, mode='w')
json.dump(WORD, fd)
fd.close()
実行して、結果を表示します。
$ ./testdump.py
WORD : <class 'str'>
$ cat file_write.json
"{\"aaa\": \"1111\", \"bbb\": \"2222\", \"ccc\": { \"ddd\": \"333\", \"eee\": \"444\", \"fff\": \"555\" }}"
str型のjson(WORD変数)を読み込んで、ファイルに書き込んでいます。
json.dumps()のテストコード
#!/usr/bin/env python
import json
WORD={"aaa": "1111", "bbb": "2222", "ccc": { "ddd": "333", "eee": "444", "fff": "555" }}
print("WORD : ", type(WORD))
data = json.dumps(WORD)
print(type(data))
print(data)
実行して、結果を表示します。
$ ./testdumps.py
WORD : <class 'dict'>
<class 'str'>
{"aaa": "1111", "bbb": "2222", "ccc": {"ddd": "333", "eee": "444", "fff": "555"}}
dict型(data変数)を読み込んで、str型のjson(WORD変数)に格納しています。
ファイルの内容を表示したいだけのとき
jsonのファイルを表示したいだけなら、次のコマンドで可能です。
$ python -m json.tool file.json
実行すると、このように整形されて表示されます。
{
"aaa": "1111",
"bbb": "2222",
"ccc": {
"ddd": "333",
"eee": "444",
"fff": "555"
}
}
最後に
下記の表の内容を理解していなかっただけです。
扱う対象 | jsonファイル | jsonのstr型 |
---|---|---|
dict型を出力 | ファイルを入力 : json.load() | str型を入力 : json.loads() |
dict型を入力 | ファイルを出力 : json.dump() | str型を出力 : json.dumps() |
documentを読んだだけでは、理解できていなかったです。
この記事を書くために調べながらテストして、分かったような気がします。
アウトプットって大切です。