TL;DR
JSON(JavaScript Object Notation)は、JavaScript のサブセット。様々な API や言語で、潑剌とサポートされているデータ交換形式のテキストフォーマットである。プロパティのみを含むことが可能であり、メソッドを含むことはできない。
なぜ JSON を使うのか?
JSON を使えば、ネットワークを通してデータを転送できる。プログラミング言語間のデータの受け渡しがスムーズになるのは相違ない。
複雑な記号を使わず、データをシンプルに見せるのがブレース{}とブラケット[]である。シンプルに記述できるので、可視性も高い。言語にも依存しない。
このような次第で、Python の構文としても有効で密接な関係がある。
json の基本的な記述方法
基本的な記述方法は次のコードである。変数名と値をコロンで区切りペアで記述する。
{ "name": "yamada", "age": 27 }
葉脈をくっきりさせ可読性を高めるために、改行を用いることが多い。改行時のインデント幅は左に空白スペース 2 か 4 を入れるのが適切である。
{
"foo_1": 1,
"foo_2": 2,
"foo_3": 3,
"foo_4": 4
}
JSON では汎用的な次の型を扱うことができる。
- null
- 文字列
- int、float
- 真偽値
- 配列
JSON を辞書に変換
Python には JSON を簡単に辞書に変換する標準の json モジュールがある。loads()の引数に JSON 文字列を指定する。次のコードでは、json モジュールをインポートして、キーを指定して値を取り出している。
import json
json_t = """
{
"sns": ["twitter", "facebook", "instagram"],
"items": [111, 222, 333],
"users": [
{"name": "山田", "id": 1},
{"name": "鈴木", "id": 2}
]
}
"""
d = json.loads(json_t)
print(d)
# ダブルクオーテーションが、シングルクォーテーションに変わっている。
# {'sns': ['twitter', 'facebook', 'instagram'], 'items': [111, 222, 333], 'users': [{'name': '山田', 'id': 1}, {'name': '鈴木', 'id': 2}]}
print(d["sns"][0])
# twitter
print(d["users"][0]["id"])
# 1
時間を JSON に変換
datetime オブジェクトの JSON 変換
import datetime
import json
n = datetime.datetime.utcnow()
json.dumps(n, default=str)
# "2021-11-18 06:48:35.464328"
辞書を JSON に変換
辞書を json に変換する。indent はインデント幅を指定し見やすくすることができる。ensure_ascii=False
を使うと日本語を日本語としてそのままの形式で出力する。
import json
d = {'sns': ['twitter', 'facebook', 'instagram'], 'items': [111, 222, 333], 'users': [{'name': '山田', 'id': 1}, {'name': '鈴木', 'id': 2}]}
j = json.dumps(d, indent=2, ensure_ascii=False)
print(j)
上の出力結果。シングルクォーテーションがダブルクオーテーションに変わっている。
{
"sns": ["twitter", "facebook", "instagram"],
"items": [111, 222, 333],
"users": [
{
"name": "山田",
"id": 1
},
{
"name": "鈴木",
"id": 2
}
]
}