【Python】Pythonでjsonを扱いたい!
pythonを使ってjsonファイルの中身を修正したいなーと思ったので
Pythonでのjsonファイルの使い方を勉強した内容です。
jsonの中身
今回用意したjsonの中身は以下のような感じです。
{
"data1" : {
"elements1" : "data1 elements1",
"elements2" : "data1 elements2"
},
"data2" : {
"elements1" : "data2 elements1",
"elements2": {
"element1" : "data2 elements2 element1",
"element2" : "data2 elements2 element2",
"element3" : "data2 elements2 element3"
}
}
}
jsonのインポート
まず以下のライブラリをimport
しておきます。
jsonライブラリはpip install
する必要はありません。
import json
jsonファイルを開く
次にopen
とjson.load()
使用してjson
ファイルを開きます。
この時open
では読み取り専用モードで開いておきましょう。
def main():
json_file = open('data.json', 'r')
json_data = json.load(json_file)
if __name__ == '__main__':
main()
こうすることでjsonファイルがdict
型で読み込まれます。
後はこれを読み取っていくだけです。
jsonから取得したdictを読み取っていく
用意したjsonのdictデータを
forで取得していく場合は各要素のdict
が返ってくるわけではなく、
一番上の要素data1
とdata2
がstr
型で返ってきます。
そのためdict
で取得するコードを書いておく必要があります。
指定した要素の要素をdict
取得したい場合は
data1['elements']
のように書くことで取得できます。
def main():
json_file = open('data.json', 'r')
json_data = json.load(json_file)
for datas in json_data:
# datasにはstrが入っているためdictで取得する
data = json_data[datas]
if __name__ == '__main__':
main()
jsonファイルを書き換えていく
dict
型で読み込んでいるので
まんま要素を指定して書き換えたいように書き換えるだけです。
def main():
json_file = open('data.json', 'r')
json_data = json.load(json_file)
for datas in json_data:
data = json_data[datas]
data['elements2'] = 'new data elements'
if __name__ == '__main__':
main()
jsonファイルのdata1
の要素elements2
のように中にデータが1個だけ入ってる、
いわゆる中身がstr型であれば
data1['elements2'] = 'new data elements'
のように書くことで
書き換えができます。
ただ問題はdata2
のelements2
の部分です。
この部分は上記のように指定すると
中身はdict
型になっており型が合わないため
エラーが発生し要素の書き換えができません。
そのため要素がstr
型なのかdict
型なのかを確認して
その結果で処理を分けておく必要があります。
def main():
json_file = open('data.json', 'r')
json_data = json.load(json_file)
for datas in json_data:
data = json_data[datas]
elements = data['elements2']
if isinstance(elements, str):
elements['elements2'] = 'new data elements'
if isinstance(elements, dict):
element = elements['elements2']
element['element2'] = 'new data elements element'
if __name__ == '__main__':
main()
jsonファイルの保存
現在書き換えているのは
読み込んだjsonファイルをdict型の変数に入れて
そこを編集しているだけなので
一通り書き換えが完了したらjson形式で保存します。
保存方法としては
読み込んだファイルとは別のファイルを開き
そこに書き込む形です。
jsonファイルへの書き出しは
json.dump
を使用します。
引数は以下のように指定します。
json.dump([書き出し元dict], [書き出し先ファイル])
また、
このまま書き出すとインデントされていない
jsonファイルが出来上がるので、
インデントされたものが欲しい場合は
以下のように記入します。
json.dump([書き出し元dict], [書き出し先ファイル], indent=[インデント])
def main():
json_file = open('data.json', 'r')
json_data = json.load(json_file)
for datas in json_data:
data = json_data[datas]
elements = data['elements2']
if isinstance(elements, str):
elements['elements2'] = 'new data elements'
if isinstance(elements, dict):
element = elements['elements2']
element['element2'] = 'new data elements element'
# jsonファイルの書き出し
output_json = open('output.json', 'w')
json.dump(json_data, output_json, indent=4)
if __name__ == '__main__':
main()
要素へのアクセス方法は少しややこしいですが
慣れれば何とか……。
Discussion