9
11

More than 3 years have passed since last update.

Pythonでのjsonファイルの読み込みモジュールの比較

Last updated at Posted at 2020-03-22

はじめに

テキストファイルの読み込みモジュールについて「Pythonのテキストファイル読み込みモジュールの比較」を書きました。
jsonファイルの読み込みモジュールも同様で、使用するたびに調べていたので、
同様に書き残します。

環境

  • OS :CentOS Linux release 7.6.1810 (Core)
  • Python:Python 3.7.5

参考
json --- json エンコーダおよびデコーダ

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型)

テスト用のファイル

下記ファイルを読み込み用として作成します。

file.json
{
  "aaa": "1111",
  "bbb": "2222",
  "ccc": {
    "ddd": "333",
    "eee": "444",
    "fff": "555"
  }
}

json.load()のテストコード

jsonファイルを読み込むテストコードです。

testload.py
#!/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テキストを読み込みむテストコードです。

testlocads.py
#!/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テキストをファイルに保存するテストコードです。

testdump.py
#!/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()のテストコード

testdumps.py
#!/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を読んだだけでは、理解できていなかったです。
この記事を書くために調べながらテストして、分かったような気がします。
アウトプットって大切です。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11