Pythonに限らずプログラミングを勉強していると、JSONという言葉をよく見かけませんか?
なんとなく、まあデータの種類なんだろうな、という理解の人が多いのではないのでしょうか。
なので今日はそんな方にJSONが何かというものを理解してもらうため、
・そもそもJSONとは何か
・PythonでJSONデータをパースする
・PythonでJSONデータを書き込む
・PythonでJSONデータの中身を確認する
といった、PythonにおけるJSONの取り扱い方まで、どこよりも分かりやすく解説しますので参考にしていただければ幸いです!
それではいってみましょう!!
なお、Pythonの記事については、こちらにまとめています。
そもそもJSONとは?
JSONとはJavaScript Object Notationの略でJavaScriptの書き方に寄せて書いてあるデータファイルのことです。
分かりにくいですね、詳しく説明します。
まず、データをやりとりするときには何らかのルールが必要です。
人が見るだけであっても、記述のルールを統一しそのルールに従って書いたほうがみんなが理解できますよね?
ましてや、機械にデータを読み取らせるには厳密なルールの上に記述しなければならないのはわかると思います。
そんなルールの一つでJavaScriptの書き方に似ているデータファイルこそがJSONなのです。
実際にどんな風に記述するのか例を挙げてみてみましょう。(以下のコードをsample.jsonというファイルを作成して書き込んで下さい。)
{ "スコア一覧":[ { "科目":"英語", "得点": 80, "評価":"優" }, { "科目":"数学", "得点": 70, "評価":”良" } ] }
はい、JSONファイルの書き方のルールをいくつか箇条書きで説明します。
・文字列は””か’’で囲う
・key(名前)とvalue(値)を:で対にして記述
・まとまり毎にkey:valueは{}で囲う
・まとまりのなかのkey:valueは,で区切る
・リストは[]で囲う
こんな感じでしょうか。
実際の例を見てもわかる通り、まとまり毎を{}で区切り、中身を”名前”:”値”で対にしていますね。
スコア一覧の配列は[]で囲っています。
見てわかる通り簡潔でみやすくないでしょうか?
データを扱うファイルはJSONの他にもXMLなどがありますが、ご覧の通り可読性が高いです。
つまりJSONは、人間にも読みやすく、機械にも読み込ませることができることが最大のメリットなのです。
JSONデータの基本的な処理方法
では、実際にPythonでのJSONデータの処理の仕方について説明していきます。
先ほどJSONデータはプログラムにも読み込ませることができると言いましたが、Pythonで読み込ませるためにはPythonなりにデータをパースしてやらなければなりません。
データをパース?
少し用語が専門的ですね。
パースとは解析するという意味でここではJSONファイルをPythonが読み込めるように変換する処理のことを指します。
パースすることにより、Pythonで扱えるようになり、他のファイルに書き込んだり、好きなデータを取ってきたりできるようになります。
具体的なパースの手順としては
1,JSONデータを読み込む
2,必要な情報を取り出す
3,他のファイルに書き込む
といった手順になりますので一つ一つみていきましょう。
まずはJSONデータを読み込む
まずは、兎にも角にもデータを読み込まないと話になりません。
データを読み込むにはjson.load関数を使います。
コードをみていきましょう。
import json a = open('sample.json') b = json.load(a) print (b)
まず1行目でjsonをライブラリをインポートしてくるのは必須です。
その後2行目で、jsonファイルを開きます。
そして3行目に引数として、jsonの入ったaを渡し読み込みます。
結果は、
実行結果
{'スコア一覧': [{'科目': '英語', '得点': 80, '評価': '優'}, {'科目': '数学', '得点': 70, '評価': '良'}]}
はい、jsonの中身をそのままプリントしていますね。
また、load関数にて読み込まれたJSONデータはdictionary(辞書)型にて保存されますので覚えておきましょう。
dictionary型は、keyとvalueがセットになっているため、各要素を取り出したい時はkeyを指定して取り出すことができます。
例えばこのjsonではまずスコア一覧とその後のオブジェクト(まとまり)が対になっているため、
import json a = open('sample.json') b = json.load(a) print (b["スコア一覧"])
このようにkeyを指定すると、
実行結果
[{'科目': '英語', '得点': 80, '評価': '優'}, {'科目': '数学', '得点': 70, '評価': '良’}]
valueが返ってくるというわけです。
JSONデータを書き込む
それでは、他のファイルにJSONデータを書き込む方法についても見ていきましょう。
JSONデータを書き込むにはjson.dump関数を使います。
実際にコードから見ていきます。
import json dic = { "profile1": { "first" : "Tarou" , "last" : "Tanaka" } , "profile2" : { "fisrt" : "Hanako" , "last" : "Yamada" } } a = open('sample2.json' , 'w') json.dump(dic,a)
今回は空のsample2.jsonにdicに入れたディクショナリ型のデータを書き込もうと思います。
まず書き込むデータをdicに宣言し、その後sample2.jsonを開いています。(この状態ではまだ空)
’w’というのは書き込みの権限を与えますよ、という意味です。
その後json.dump(書き込まれるjson,書き込むjson)の順に記載して実行します。
できあがったsample2.jsonを見てみると、
{"profile1": {"first": "Tarou", "last": "Tanaka"}, "profile2": {"fisrt": "Hanako", "last": "Yamada”}}
という風に書き込まれているのが分かります。
改行などもなく見にくいなと思った場合は、
import json dic = { "profile1": { "first" : "Tarou" , "last" : "Tanaka" } , "profile2" : { "fisrt" : "Hanako" , "last" : "Yamada" } } a = open('sample2.json' , 'w') json.dump(dic, a , indent=4)
という風に引数にindentの数を入れてやると、
{ "profile1": { "first": "Tarou", "last": "Tanaka" }, "profile2": { "fisrt": "Hanako", "last": "Yamada" } }
インデントが入り可読性がアップします。
json.toolでJSONデータの中身を確認しよう
最後にコマンドラインを用いて、JSONの中身を確認する方法についても見ておきましょう。
今まで実際にパースしてJSONを確認してきましたが、少量のJSONをいちいち解析するのは正直めんどくさいですよね。
また、JSONは一行にまとまっていて、とても見づらかったりすることもしばしばです。
インデントを入れて書き出してやれば良いですが、こちらもわざわざ可動性を上げるためだけにコードを書くのも面倒くさいですよね。
そこで、一発で中身を見やすく表示してくれる、json.toolというコマンドを紹介します。
例えばsample3.jsonというものがあったとしましょう。
{"profile1": {"first": "Tarou", "last": "Tanaka"}, "profile2": {"fisrt": "Hanako", "last": "Yamada"}}
これをスクリプト(コード)を書くことなくコマンドラインで表示させてみると、
$ python -m json.tool sample.json { "profile1": { "first": "Tarou", "last": "Tanaka" }, "profile2": { "fisrt": "Hanako", "last": "Yamada" } }
はい、一発で整形されて表示されました。
書き出しなども行えたりするのでこちらの使い方も余裕があればマスターしておきましょう!
まとめ
いかがでしたでしょうか?
今回はJSONについて勉強してきましたが、JSONとはjsをベースに書かれた可読性の高いデータファイルで、パースするには、openで開いてから、json.load関数で読み込む。
書き込むには、json.dump関数で書き込むんでしたね。
簡単な内容の場合にはコマンドラインからjson.toolコマンドで表示できることも忘れてはいけません。
データを扱うXMLやJSONなどは必須の知識でこれから幾度となく使うことになるのでぜひ完全に理解しておくようにしましょう!それでは!