プログラミングに足を突っ込む30女

プログラミング初心者のmemoと日々の歩み

JSON形式とはなんなのか無視してたけど向き合った

拡張子.jsonっていうのがよく出てくる。

「なんか設定とか書いてるやつでなんかやるときに付いてくるややこしい大人のファイル」という認識で
私なんかに理解できるわけない、と思い
ほぼ無視してました。

理解せぬまま見よう見まねでちょろっといじったりしてて、
ずーっと気になったまま放置してた。

やっと向き合う気になったので、
ここに記しておく。










JSONとは

JavaScript Object Notation」の略でデータ定義言語らしいです。

……えーっと、ちょっとよく分からないんですが

XMLとかありますよね。
私はこれも無視し続けてたんですが、
これもデータ定義言語。

最近ではJSONが使われるケースが増えてるってことです。

JavaScript」と名前に付くくらいなので、
JavaScriptに深い関連がありそう。

JSに触れたことがある人は中身を見たらすぐにどういうものか分かるはず。



JSON記述方法

JavaScriptと変わりなく書けます。

Pythonで言うところの辞書型。

{title”: "プログラミングに足を突っ込む30女",
“writer": “satsukiin”,
“age”: “30s”
}


こんな感じでオブジェクトは全体を{}で囲んで
“キー名”:”値” と表記する。

要素同士は「 , 」で区切る。

例えば…



{user1”: {name”: “団長”,
        “age”: 45,
        “gender”: “男”
    },
    “user2”: {name”: “クロ”,
        “age”: 42,
        “gender”: “男”
    },
    “user3”: {name”: “ヒロ”,
        “age”: 42,
        “gender”: “男”
    }
}

某大サーカス団とは一切関係ありません、偶然です




としておけば、
団長とクロとあともう1人誰だっけ?
となっても、

user3のnameを指定すればちゃんともう1人の名前が出てくるわけです。

我ながら分かりにくい例え。

ちなみに配列も
[]で囲んで「 , 」で区切れば入れ込めます。





JSONPythonに読み込んで使う


PythonJSONデータを使ってみる。


JSONデータの読み込み

まず最初にJSONを使うライブラリをインポート。

import json

他のライブラリもだけど、
importは最初に書いておく。

そして、

a = open( ‘yasuda.json’ )
b = json.load( a )

print( b )

#実行結果▼
#{“user1”: {“name”: “団長”,“age”: 45,“gender”: “男”},“user2”: {“name”: “クロ”,“age”: 42,“gender”: “男”},“user3”: {“name”: “ヒロ”,“age”: 42,“gender”: “男”}}


yasuda.jsonに深い意味はありません。

最初のopenでファイルを開いてaに代入。

次でaに入ったJSONをロードします。

プリントすると、ちゃんとyasudaが出てきます。





データの取り出し


JSONデータはload()Pythonに読み込むと、辞書型になっています。

なので、Pythonの辞書と同じように使えるわけです。


print( b[“user1”] )

#実行結果
#{“user1”: {“name”: “団長”,“age”: 45,“gender”: “男”}}


こんな感じ。





Pythonからデータを書き込む

便利な関数があるので簡単に書き込むこともできます。


import json

dictionary = {
    “user4” : {
        “name” : “渡部”,
        “age”: 47
    },
    “user5”: {
        “name”: “小笠原諸島”,
        “age”: 48
    }
}

a = open(‘anja.json’, ‘w’)
son.dump( dictionary, a )


まず辞書を作って、それをそのまま書き込む感じですね。

open()の第二引数’w’は、
データを開くときに書き込みの権限も与えるためのもの。

json.dump()で書き込みます。





まとめ

JSONって意外に読みやすい!!