【Python入門】JSON形式データの扱い方

※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。

参考サイト：[【Python入門】JSON形式データの扱い方](http://programming-study.com/technology/python-json-2/)

#【Python入門】JSON形式データの扱い方

Web アプリケーションでデータのやりとりを行う際に、「JSON」という形式でデータをやり取りすることがあります。JSON は C 言語や JAVA などの様々な言語で使われており、もちろん Python でも扱うことができます。今回は、Python で JSON を扱う方法の基礎的な部分について説明します。

目次
1 [JSON とは](##JSON とは)
2 [JSON を扱う](##JSON を扱う)
2.1 [JSON ファイルの読み込み](##JSON ファイルの読み込み)
2.2 [JSON の変換](##JSON の変換)
2.3 [JSON の書き込み](##JSON の書き込み)

##JSON とは

まずは、JSON というものがどういった形式なのかについて説明します。JSON は「JavaScript Object Notation」の略で、「JavaScript 言語の表記法をベースにしたデータ形式」と言えます。しかし、表記が JavaScript ベースなだけで、それ以外のさまざまな言語で利用できます。JSON では、ある数値と、その数値の名前であるキーのペアをコロンで対にして、それらをコンマで区切り、全体を波かっこで括って表現します。


```py3
{
 "book1":{
"title": "Python Beginners",
 "year": 2005 ,
"page": 399
},
"book2":{
 "title": "Python Developers",
 "year": 2006 ,
"page": 650
 }
}
```

##JSON を扱う

それでは、実際に Python で JSON 形式のデータを扱う方法について説明します。

###JSON ファイルの読み込み

JSON ファイルを扱うには、まず JSON ファイルからデータを読み込む必要があります。
JSON ファイルを読み込む手順は
(1)JSON ファイルを開く
(2)開いたファイルを JSON として読み込む
の 2 ステップです。具体的には、以下のように記述します。

```py3
import json #必ず必要
変数 1 = open(‘読み込む JSON ファイルのパス’ , ‘r’) #ここが(1)
変数 2 = json.load(変数 1) #ここが(2)
```

JSON 関連の関数を使うために、初めに json モジュールをインポートする必要があります。忘れないようにしましょう。続いて、JSON ファイルを読み込みファイルとして開きます。これは通常のファイル操作と同じです。そして、読み込んだ JSON ファイルを、load 関数を使って JSON オブジェクトとして保存します。これで JSON の読み込みができました。

###JSON の変換


JSON ファイルを load 関数で読み込むと、Python で扱いやすいように辞書型で保存されます。辞書型なら要素の取り出しなどが容易に出来て便利ですが、ときには JSON 形式の文字列として扱いたい場合もあります。その場合は、辞書型から JSON 形式の文字列へ変換しましょう。辞書型から JSON 形式の文字列への変換は dumps 関数を使います。

```py3
import json
変数 1 = json.dumps(変数 2) #変数 2 は辞書型
dumps も json モジュールの関数なので、json モジュールをインポートしてから使います。
dumps は辞書型を引数にとり、それを文字列に変換して返す関数です。
import json
f = open('test.json', 'r')
json_dict = json.load(f)
print('json_dict:{}'.format(type(json_dict)))
print('-----辞書型から JSON 形式の文字列へ変換-----')
json_str = json.dumps(json_dict)
print('json_str:{}'.format(type(json_str)))
```

実行結果
>json_dict:
—–辞書型から JSON 形式の文字列へ変換—–
json_str:

また、これとは逆に JSON 形式の文字列を辞書型に変換することもできます。変換には jsonモジュールの loads 関数を使います。

```py3
import json
～ここまでは上記の例と同じなので省略～
json_dict2 = json.loads(json_str)
print(‘json_dict2:{}’.format(type(json_dict2)))
```


実行結果

>json_dict:
—–辞書型から JSON 形式の文字列へ変換—–
json_str:
—–JSON 形式の文字列から辞書型へ変換—–
json_dict2:
JSON の書き込み

Python で扱った JSON データはファイルに書き込むことができます。ファイルへの書き込
みは json モジュールの dump 関数を使います。dumps ではないので注意してください。

```py3
import json
変数 1 = open(‘書き込みファイルのパス’, ‘w’) #書き込むファイルを開く
json.dump(変数 2, 変数 1) #変数 2 は辞書型
```

dump は書き込みたい辞書型の変数と、書き込み先のファイルを引数に取ります。JSON 形式の文字列を通常のファイル書き込みのように write 関数で書き込むこともできますが、辞書型を書き込みたい場合はこの方法ならいちいち変換しなくても良いのでラクチンです。
それではまとめとして、以下のような json ファイルを読み込み、文字列へ変換した後、もう一度辞書型にして、別の json ファイルに書き込むという一覧の流れを見てみます。


test.json

```py3
{
 "book1":{
"title":"Python Beginners",
"year": 2005 ,
"page": 399
},
"book2":{
 "title": "Python Developers",
 "year": 2006 ,
"page": 650
}
}
```

```py3
import json
#JSON ファイルの読み込み
f = open('test.json', 'r')
json_dict = json.load(f)
print('json_dict:{}'.format(type(json_dict)))
#JSON データの変換
print('-----辞書型から JSON 形式の文字列へ変換-----')
json_str = json.dumps(json_dict)
print('json_str:{}'.format(type(json_str)))
print('-----JSON 形式の文字列から辞書型へ変換-----')
json_dict2 = json.loads(json_str)
print('json_dict2:{}'.format(type(json_dict2)))
#JSON データの書き込み
f2 = open('test2.json', 'w')
json.dump(json_dict2, f2)
```

実行結果

>json_dict:
—–辞書型から JSON 形式の文字列へ変換—–
json_str:
—–JSON 形式の文字列から辞書型へ変換—–
json_dict2:
test2.json
{“book2″: {“year”: 2006, “title”: “Python Developers”, “page”: 650}, “book1″: {“year”: 2005,
“title”: “Python Beginners”, “page”: 399}}