Python: JSON とは何か?(loads、dumps など)

TwitterFacebookHatena
  • 公開:2021-11-19
  • 更新:2023-10-26
  • 文章量:1933
  • Python

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
    }
  ]
}

json --- JSON エンコーダおよびデコーダ — Python 3.10.0b2 ドキュメント

Python: JSON とは何か?(loads、dumps など)