jsonデータをPythonで扱う方法について勉強したのでまとめ
jsonとは?
jsonデータは複数の言語で利用可能な共通フォーマット
CSVやXMLといったものも同じようデータフォーマットとして用いられるが、それらのフォーマットと比較してjsonは読み書きしやすいという特徴がある。
外部ファイルとしてPython内で利用する変数の保存などに利用可能。
Jsonの読み込み
jsonファイルを準備
これを準備しないと始まらない。
まずはローカルにjsonファイルを作成します。
バナナとリンゴについて記述したデータ
{
"food1":{
"name":"banana",
"color": "yellow" ,
"price": 200
},
"food2":{
"name": "apple",
"color": "red" ,
"price": 100
}
}
jsonファイルの読み込み
jsonモジュールをインポートします。
import json
jsonファイルを開く
jsonファイルを開きます
sample.json
の箇所はファイルパス
r
は読み込みである事を示しています。
Pythonでファイルを開くときに、変数名にf
が使われることが多いようだが、何でも構わない。
f = open('sample.json', 'r')
jsonファイルの読み込み
load関数を使って、開いたファイルを「jsonファイル」として読み込みます。
読み込まれたデータのタイプは辞書型
となります。
dict_json = json.load(f)
jsonファイルのプリント
jsonデータをプリントしてみる。
問題なくプリントされていれば読み込み成功
一つ目はTypeの表示。dict
型になっている
二つ目はデータの全表示
三つめがKeyを利用して特定のデータだけを抽出
print("type_name--------")
print(type(dict_json))
print("json_all--------")
print(dict_json)
print("json_pick--------")
print(dict_json['food1']['name'])
type_name--------
<class 'dict'>
json_all--------
{'food1': {'name': 'banana', 'color': 'yellow', 'price': 150}, 'food2': {'name': 'apple', 'color': 'red', 'price': 100}}
json_pick--------
banana
jsonファイルを閉じる
opneしたファイルはcloseメソッドを使って閉じる必要がある
f.close()
Jsonの書き込み
内容の書き換え
Jsonの書き込みを行う前に、データの中身を書き換えてみる
name : banana → peach に
color : yellow → pink に書き換え
(dict_json['food1']['name'])="peach"
(dict_json['food1']['color'])="pink"
内容のプリント
先ほどのプリント分を実行すると中身が書き換わっている事がわかります。
type_name--------
<class 'dict'>
json_all--------
{'food1': {'name': 'peach', 'color': 'pink', 'price': 150}, 'food2': {'name': 'apple', 'color': 'red', 'price': 100}}
json_pick--------
peach
Jsonファイルを開く
sample_2.json
の箇所はファイルパス
w
は書き込みである事を示しています。
ファイルが存在しなければ新規作成、存在していれば上書きして保存されます
今回は別名ファイルとしてsample_2.json
を指定。
new_json = open('sample_2.json', 'w')
Jsonファイルを書き込む(dump)
dumpという関数を使って書き出します
json.dump(引数1
(書き込みたいデータ)、引数2
(保存先))
json.dump(dict_json, new_json)
指定のパスにjsonファイルが生成されます
データを開いて下記が記述されていれば成功。
{"food1": {"name": "peach", "color": "pink", "price": 150}, "food2": {"name": "apple", "color": "red", "price": 100}}
インデントを利用しデータの視認性を向上する(dump)
第三引数のindent
を利用すると視認性が向上します。
json.dump(引数1
(書き込みたいデータ),引数2
(保存先),引数3
(indent),)
json.dump(dict_json, new_json, indent=3)
{
"food1": {
"name": "peach",
"color": "pink",
"price": 150
},
"food2": {
"name": "apple",
"color": "red",
"price": 100
}
}
その他
jsonのデータをstr文字列として変換することができる。
使途がわからないが「pythonでjson」と検索すると、たいていの記事でこちらに関しての記述があるので、ニーズがあるものだと思われる。
データは辞書型
→ str型
に変換される。
json_str = json.dumps(dict_json)
文字列に変換されたデータは辞書型
ではなくなるため、下記のようなKey指定でのデータの取得ができなくなる
print(dict_json['food1']['name'])
TypeError: string indices must be integers