1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[python] JSONファイルの扱い方

Posted at

はじめに

最近はcsv形式よりもjsonの方が紐づけなどに利点をより感じる。
会社で自分のデータをjson形式で管理しようか考えたりする
ここではpythonを用いてjsonファイルを扱う方法をまとめる

環境

windows 10
python version: 3.7.8

Code

JSONとは

JSON(JavaScript Object Notation)はインターネット上でデータのやり取り時に使われる手法の1つである。そのほかにXML, CSV、BSONなどがあり、JSONはネット上でよく使われるだけであって、特にJSONだけにこだわる必要はない。
しかし、JSONは高次元のデータ、例えば表の中に表が存在するようなデータ、において利点がある。

test.json
{
	"employees": {
		"1": {
			"name": "Kobaayshi",
			"age": 12,
			"sex": "M"
		},
		"2": {
			"name": "Tanaka",
			"age": 33,
			"sex": "W",
			"hobby": [
				"swim",
				"golf"
			]
		},
		"3": {
			"name": "Suzuki",
			"age": 26,
			"sex": "M",
			"family": {
				"married": true,
				"children": false
			}
		}
	}
}

このように3人の従業員のデータがあるとするとき、それぞれの従業員番号1,2,3があり、その中に名前、年齢、性別が存在する。よってそれぞれの従業員の情報は従業員番号に紐づけられており、従業員番号さえあれば、他のデータベースに紐づけることができる。

jsonファイルの書き方

import json

data = {"employees": {
    1: {
        "name": "Kobaayshi",
        "age": 12,
        "sex": "M",
    },
    2: {
        "name": "Tanaka",
        "age": 33,
        "sex": "W",
    },
    3: {
        "name": "Suzuki",
        "age": 25,
        "sex": None,
    },
}
}

f = open('./test.json', 'w')
json.dump(data, f, indent="\t")
f.close()
test.json
{
	"employees": {
		"1": {
			"name": "Kobaayshi",
			"age": 12,
			"sex": "M"
		},
		"2": {
			"name": "Tanaka",
			"age": 33,
			"sex": "W"
		},
		"3": {
			"name": "Suzuki",
			"age": 25,
			"sex": null
		}
	}
}

openのモード'w'ではファイルが存在しなくても新しく生成され、ファイルが存在する場合は必ず上書きされる。

jsonファイルの読み方

f = open('./test.json', 'r')
f_json = json.load(f)
print(f_json)
f.close()
{'employees': {'1': {'name': 'Kobaayshi', 'age': 12, 'sex': 'M'}, '2': {'name': 'Tanaka', 'age': 33, 'sex': 'W'}, '3': {'name': 'Suzuki', 'age': 25, 'sex': None}}}
print(f_json["employees"]["3"])
# {'name': 'Suzuki', 'age': 25, 'sex': None}

print(f_json["employees"]["3"]["age"])
# 25

print(f'The age of {f_json["employees"]["3"]["name"]} is {f_json["employees"]["3"]["age"]}')
# The age of Suzuki is 25

キーワードで必要な情報を読み取ることができる。

jsonファイルの修正

f = open('./test.json', 'r')
f_json_modify = json.load(f)

print(f_json_modify["employees"]["3"])
# {'name': 'Kobaayshi', 'age': 12, 'sex': 'M'}


f_json_modify["employees"]["3"]["age"] += 1

f_json_modify["employees"]["3"]["sex"] = "M"

f_json_modify["employees"]["3"]["hobby"] = ["Swimming", "golf"]
# キーワードや値がなくても追加できる
# リストとしてデータを追加

print(f_json_modify["employees"]["3"])
# {'name': 'Suzuki', 'age': 26, 'sex': 'M', 'hobby': ['Swimming']}

f.close()

f = open('./test.json', 'w')
json.dump(f_json_modify, f, indent="\t")
f.close()

最終的なJOSNファイルの内容

{
	"employees": {
		"1": {
			"name": "Kobaayshi",
			"age": 12,
			"sex": "M"
		},
		"2": {
			"name": "Tanaka",
			"age": 33,
			"sex": "W"
		},
		"3": {
			"name": "Suzuki",
			"age": 26,
			"sex": "M",
			"hobby": [
				"Swimming",
                "golf"
			]
		}
	}
}

まとめ

pythonでjsonを扱う方法をまとめた。
csv形式の方が社内データベースとしては良く使われる気がするが、高次元でデータを管理したい場合はJSON形式の方がよりメリットを感じる。firebase や mongodbのように、高次元データの利点がある。
特にデータの紐づけが大変な時はJSONですかね

参考

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?