4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでjsonの読み込みと書き込みする

Posted at

jsonデータをPythonで扱う方法について勉強したのでまとめ

jsonとは?

jsonデータは複数の言語で利用可能な共通フォーマット
CSVやXMLといったものも同じようデータフォーマットとして用いられるが、それらのフォーマットと比較してjsonは読み書きしやすいという特徴がある。
外部ファイルとしてPython内で利用する変数の保存などに利用可能。

Jsonの読み込み

jsonファイルを準備

これを準備しないと始まらない。
まずはローカルにjsonファイルを作成します。
バナナとリンゴについて記述したデータ

sample.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ファイルが生成されます
データを開いて下記が記述されていれば成功。

sample_2.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)
sample_2.json
{
   "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
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?