Python

【Python】オブジェクトをJSON文字列に変換する

この記事では、オブジェクトをJSON文字列に変換する方法を解説します。JSON文字列に変換することで、オブジェクトをファイルに書き込むことができます。また、書き込んだJSON文字列を読み込んでオブジェクトに変換することもできます。

エンコード

オブジェクトをJSON文字列にエンコードするには、json.dumps()を使います。

import json

# データ
data = [1, 2, 3]

# エンコード
encode_data = json.dumps(data)
print(f'型: {type(encode_data)}, 値: {encode_data}')

実行結果

型: <class 'str'>, 値: [1, 2, 3]

変換表

JSON文字列にエンコードする際は、以下の変換表を元にエンコードされます。

Python JSON
dict object
list, tuple array
str string
int, float, intやfloatの派生列挙型 number
True true
False false
None null
辞書をエンコードした際、keyは必ず文字列に変換されてしまいます。なので、デコードした際に全く同じ辞書には戻らない可能性があります。

インデント

indent引数を指定することで、インデントを指定することができます。辞書をエンコードした時に指定することで見やすく整形できます。

import json

# データ
data = {'a': 1, 'b': 2, 'c': 3}

# エンコード
encode_data = json.dumps(data, indent=4)
print(encode_data)

実行結果

{
    "a": 1,
    "b": 2,
    "c": 3
}

セパレーター

separators引数では、リストや辞書のセパレーターを指定することができます。指定する際は、(item_separator, key_separator)という形のタプルを使います。

import json

# データ
data = {'a': 1, 'b': 2, 'c': 3}

# エンコード
encode_data = json.dumps(data, separators=(',',':'))
print(encode_data)

実行結果

{"a":1,"b":2,"c":3}

セパレーターの空白を削除したのでギチギチに表示されました。

ソート

sort_keys引数にTrueを指定することで、辞書がkeyによってソートされます。

import json

# データ
data = {'b': 1, 'c': 2, 'a': 3}

# エンコード
encode_data = json.dumps(data, sort_keys=True)
print(encode_data)

実行結果

{"a": 3, "b": 1, "c": 2}

ファイルに書き込む

json.dump()を使うことで、オブジェクトをエンコードした結果を引数に指定したファイルに書き込んでくれます。

import json

# データ
data = {'a': 1, 'b': 2, 'c': 3}

# ファイルに書き込む
with open('data.json', 'w') as f:
    json.dump(data, f)

data.json

{"a": 1, "b": 2, "c": 3}

デコード

JSON文字列をオブジェクトにエンコードするには、json.loads()を使います。

import json

# データ
data = {'a': 1, 'b': 2, 'c': 3}

# エンコード
encode_data = json.dumps(data)
print(f'型: {type(encode_data)}, 値: {encode_data}')

# デコード
decode_data = json.loads(encode_data)
print(f'型: {type(decode_data)}, 値: {decode_data}')

実行結果

型: <class 'str'>, 値: {"a": 1, "b": 2, "c": 3}
型: <class 'dict'>, 値: {'a': 1, 'b': 2, 'c': 3}

変換表

JSON文字列をデコードする際は、以下の変換表を元にデコードされます。

JSON Python
object dict
array list
string str
number(int) int
number(real) float
true True
false False
null None

ファイルから読み込む

json.load()を使うことで、指定したファイルを読み込みオブジェクトにデコードします。例えば、以下のようなjsonファイルをデコードしてみます。

data.json

{"name": "田中太郎", "age": 20}
import json

with open('data.json', 'r') as f:
    decode_data = json.load(f)

print(f'型: {type(decode_data)}, 値: {decode_data}')

実行結果

型: , 値: {'name': '田中太郎', 'age': 20}

まとめ

この記事では、オブジェクトをJSON文字列にエンコードする方法とデコードする方法を解説しました。

オブジェクトをJSON文字列に変換することで、ファイルに読み書きできて便利です。また、JSONはPython以外でも広く使われているので相互運用する際にも使えます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』