0Pricing
Python Academy · レッスン

JSON のエンコードとデコード

json.loads、json.dumps、json.load/dump で JSON の入出力を行います。

「JSON のエンコードとデコード」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

Pythonのjsonモジュールは、シンプルで一貫した関数を使って、PythonオブジェクトとJSON文字列またはファイルの間で変換します。

json.dumps()

json.dumps(obj)は、PythonオブジェクトをJSON文字列にシリアライズします。indent=2を指定すると、読みやすく整形して出力します。
import json
d = {'name': 'Alice', 'age': 30, 'active': True}
print(json.dumps(d, indent=2))

json.loads()

json.loads(s)は、JSON文字列をPythonオブジェクトにパースします。JSONのオブジェクトはdictに、配列はlistになります。
import json
s = '{"name": "Alice", "scores": [90, 85]}'
data = json.loads(s)
print(type(data), data['name'])

ファイルへのjson.dump()

json.dump(obj, file_object)は、直接ファイルにシリアライズします。先に文字列を取得する必要はありません。
import json, tempfile, os
tmp = tempfile.mktemp(suffix='.json')
with open(tmp, 'w') as f:
    json.dump({'x': 1}, f, indent=2)
print(open(tmp).read())
os.unlink(tmp)

ファイルからのjson.load()

json.load(file_object)は、開いているファイルオブジェクトからJSONを直接パースします。
import json, io
buf = io.StringIO('{"key": "value"}')
data = json.load(buf)
print(data)

JSONの型マッピング

JSONのobject→dict、array→list、string→str、number→int/float、true/false→True/False、null→Noneです。
import json
s = '[1, "two", true, null, {"a": 3.14}]'
print(json.loads(s))

シリアライズできない型

datetime、set、bytesはJSONにシリアライズできません。default=関数を指定するか、JSONEncoderをサブクラス化します。
import json
from datetime import datetime
def default(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError(f'{type(obj)} not serializable')
print(json.dumps({'ts': datetime.now()}, default=default))

sort_keysとseparators

sort_keys=Trueはdictのキーをソートします。separators=(',', ':')は空白を削除して、コンパクトに出力します。
import json
d = {'z': 3, 'a': 1, 'm': 2}
print(json.dumps(d, sort_keys=True, separators=(',', ':')))

整形出力

json.dumps(obj, indent=4, ensure_ascii=False)は、Unicodeを保持した読みやすいJSONを生成します。
import json
d = {'name': 'Mehmet', 'city': 'Istanbul'}
print(json.dumps(d, indent=4, ensure_ascii=False))

JSONDecodeError

json.loads(invalid)はjson.JSONDecodeErrorを発生させます。ユーザー入力をパースするときは、必ずtry/exceptで囲みます。
import json
try:
    json.loads('{bad json}')
except json.JSONDecodeError as e:
    print(f'Parse error: {e}')

JSONファイルの更新

読み込み→変更→書き戻しは、JSON設定ファイルを更新する標準的なパターンです。
import json, io
buf = io.StringIO('{"count": 5}')
data = json.load(buf)
data['count'] += 1
print(json.dumps(data))

クイックチェック

JSON文字列をPythonオブジェクトにパースする関数はどれですか?

まとめ

文字列にはjson.dumps/loads、ファイルにはjson.dump/loadを使います。型はobject→dict、array→list、null→Noneに対応します。default=関数でカスタムシリアライズができます。

続けましょう

その調子です!次のレッスンに進みましょう。

よくある質問

「JSON のエンコードとデコード」レッスンは無料ですか?

はい。「JSON のエンコードとデコード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「JSON のエンコードとデコード」で何を学びますか?

json.loads、json.dumps、json.load/dump で JSON の入出力を行います。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「JSON のエンコードとデコード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSON のエンコードとデコード
  2. 入れ子になった JSON 構造の処理
  3. csv.reader による CSV の読み取り
  4. csv.DictWriter による CSV の書き込み
← Python Academyに戻る