pythonでjson読み込みやcsvデータ変換、出力

Pythonでjsonの読み込み、文字列変換

JSONとは
JSONは、JavaScriptObjectNotation(JSON)というデータ交換フォーマット。PythonでJSONデータを扱うためのツールとしてjsonモジュールが提供されています。

jsonモジュールを使うと、load/dump関数でJSONファイルの読み書きや、JSON文字列の変換を行うことができます。

公開APIなんかも、レスポンスをJSON形式で返すことも多く、PythonでJSONを使う機会は多いんですね。

JSONデータの読み書き

PythonでJSONを扱う方法を解説

loads()とdumps()関数を使うことで、JSON形式のデータを含む文字列のエンコード/デコードを行うことが可能です。

PythonでテキストデータをJSON形式として読み込むには、以下のようにします。テキスト形式をloads関数でJSON形式に変換しているんですね。ダブルクォート3つで囲った部分は、JSON形式のテキストファイルを読み込んで変数に入れたときのイメージになります。

import json

json_string = """
{
  "name": "John Doe",
  "age": 30,
  "address": "123 Main Street, Anytown, CA 91234"
}
"""

data = json.loads(json_string)

print(data)
ちなみに、JSON形式はフツーにテキスト形式で記述できます。で、書き出すときはdumps関数でJSON形式→テキスト形式に変換するんですね。
import json

data = {
    "name": "John Doe",
    "age": 30,
    "address": "123 Main Street, Anytown, CA 91234"
}

json_string = json.dumps(data, indent=4)

print(json_string)

いずれのサンプルも、実行すると以下のように表示されます。

{
    "name": "John Doe",
    "age": 30,
    "address": "123 Main Street, Anytown, CA 91234"
}

JSONデータとテキストデータの変換は、json.loads、json.dumpsを使うという点を覚えておきましょう。

Pythonのファイル入出力に関する入門

Pythonのファイル入出力に関する入門

では、テキストファイルを読み込んでPython内部でJSON形式データとして保持したり、JSON形式データをテキストとして出力するには?

テキストファイルからの読み込みサンプルはこう。ファイルdata.jsonからデータを読み込んで、内部でJSON形式の変数dataに格納します。

import json

with open("data.json") as f:
    data = json.load(f)

print(data)
JSON形式データのテキストファイルへの書き込みはこう。
import json

data = {
    "name": "John Doe",
    "age": 30,
    "address": "123 Main Street, Anytown, CA 91234"
}

with open("data.json", "w") as f:
    json.dump(data, f, indent=4)

テキストファイルからJSONを読み込むと、Pythonオブジェクトに変換されます。テキストファイルにJSONを書き込むと、PythonオブジェクトがJSONに変換されてファイルに書き込まれます。

PythonでJSONからCSVに変換するサンプル

PythonでJSONからCSVに変換するサンプル

JSONデータはちょくちょくCSVファイルに変換したいケースがあります。以下は、テキストファイルを読み込んでPython内部でJSON形式データとして保持し、CSV形式でテキストファイルに出力するサンプルです。

import csv

with open("data.json") as f:
    data = json.load(f)

with open("data.csv", "w") as f:
    writer = csv.writer(f)
    writer.writerow(data.keys())
    writer.writerows(zip(*data.values()))
実行すると、以下のようなコードが出力されます。
name,age,address
John Doe,30,123 Main Street, Anytown, CA 91234

関連)PythonのCSV作成