diadia

興味があることをやってみる。自分のメモを残しておきます。

DRF JSONデータの成形

成形する必要性

django rest framework の場合request.POSTには注意事項がある。
それはキーに対する値が空(ブランク?null?)の項目はDRFはエラーを吐き出す。
辞書型データに例えて説明すると、ex_dict["key1"]=""の要素を含むデータをrequests.POSTするとエラーが出るという意味だ。
したがってJSONデータをPOSTする前に空データを削除する工程を加える必要がある。これはJSONデータに変換してから該当要素を削除するよりも、辞書型データの段階で空の値を検出して当該データから削除し、JSONデータに変換する方法をとるのがおすすめだ。

以下のコードは実装例になる。

実装例

前提はcsvファイルからJSONを生成する。

fieldnames = ("id","title","length","datetime")

with open(INPUT_FILE,"r",encoding="utf-8") as f:
	reader = csv.DictReader(f, fieldnames)
	for row in reader:           # rowはdictデータ
		for key, value in list(row.items()):
			if value == "":                 # valueが空の場合にdictデータからその要素を削除する
				del(row[key])

		headers = {'content-type': 'application/json'}
		URL     = "http://127.0.0.1:8000/api/"

        data    = json.dumps(row)          # dict型データをJSONに変換する
		res     = requests.post(URL, data=data, headers=headers)
		print(res)