๐[Flask] json๊ด๋ จ ๋ชจ๋
Flask JSON๊ด๋ จ ๋ชจ๋
์๋ ๋ช ๋ น์ด๋ฅผ ์ฝ๋ ๋งจ์์ ์ ์ธํด์ ๋ชจ๋์ ๊ฐ์ ธ์จ๋ค.
import json
get_json()
ํ๋ผ์คํฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ฉ์๋์.
REST API์์๋ POST๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ json ํํ body๋ฅผ ํตํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
์ด ๋, request.get_json()์ผ๋ก ํ์ด์ฌ ๋ฐ์ดํฐ ํ์์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์.
[์์]
{
"user_id": "test01",
"user_name": "ํ
์คํธ01",
}
@user_bp.route('/create', methods=['POST'])
def create():
print(request.is_json)
params = request.get_json()
print(params['user_id'])
return 'ok'
True
{'user_id': 'test01', 'user_name': 'ํ
์คํธ01'}
test01
jsonify()
์ฌ์ฉ์๊ฐ json data๋ฅผ ๋ด๋ณด๋ด๋๋ก ์ ๊ณตํ๋ flask์ ํจ์์.
jsonify()๋ json response๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์ด๋ฏธ content-type header๊ฐ โapplication/jsonโ๋ก ๋์ด ์๋ flask.Response() ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค.
jsonify๋ json.dump๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์คํค ์ด์ค์ผ์ดํ ์ธ์ฝ๋ฉ์ ์ ์ฉ.
ํ๋ก ํธ์๋์์๋ ๋ค์ ์ด ์ฝ๋ํฌ์ธํธ๋ค์ ๋ฌธ์์ด๋ก ๋ณํํด์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์.
- ์ ๋ฆฌ
- content-type : application/json
json.dumps(): Python ๊ฐ์ฒด๋ฅผ json ๋ฌธ์์ด๋ก ๋ณํ
MIME
type header๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ encoded string์ ๋ฆฌํดํ๋ ๋ฉ์๋์.
flask๊ฐ ์์์ ํ๋จํด response๋ฅผ ์๋์ผ๋ก ๋ณด๋ด์ฃผ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ค๋ง reponse header fields๋ ๋ํดํธ(text/html; charset=utf-8)๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ ๋ฆฌ
- content-type : text/html; charset=utf-8
- jsonify๋ณด๋ค ๋ ๋ค์ํ type์ ๋ฐ์ ์ ์์.
MIME Type์ด๋?
MIME Type
์, โMultipurpose Internet Mail Extensionsโ์ ์ฝ์๋ก, ๊ฐ๋จํ ํ์ผ ๋ณํ์ ๋ปํ๋ค.
์ผ๋ฐ์ ์ผ๋ก MIME Type์ Type/Subtype
์ ํํ๋ฅผ ๊ฐ์ง๋ค.
โ/โ๋ฌธ์๋ก ๊ตฌ๋ถ๋ ๋ ๊ฐ์ ํ์
์ผ๋ก ํ์ผ์ ํ์
์ ๋ช
์ํ๊ณ , ํ์
์ด๋ฆ์๋ ๊ณต๋ฐฑ์ด ํ์ฉ๋์ง ์์.
ํ์
์ ์นดํ
๊ณ ๋ฆฌ, ์๋ธํ์
์ ๊ฐ๋ณ ํน์ ๋ฉํฐํํธ ํ์
์ด ๋ ์ ์๋ค.
[์์]
ํ์ | ์ค๋ช | ์๋ธํ์ |
---|---|---|
text | ํ ์คํธ๋ก ํํ๋๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ํ๋ด๋ฉฐ ์ธ๊ฐ์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค | text/plain, text/html, text/css, text/javascript โฆ |
image | ํ ์คํธ๋ก ํํ๋๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ํ๋ด๋ฉฐ ์ธ๊ฐ์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค | image/jpeg, image/png, image/gif โฆ |
application | ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ | application/xml, application/json, application/xhtml+xml, application/pdf โฆ |
- ์ผ๋ฐ์ ์ผ๋ก ํน์ ์๋ธํ์
์ด ์์ผ๋ฉด
text/plain
์ผ๋ก ์ฌ์ฉํจ. - ํน์ ํ์
์ด ์๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ
application/octet-stream
์ผ๋ก ์ฌ์ฉํจ.
json.loads(): json ๋ฌธ์์ด์ Python ๊ฐ์ฒด๋ก ๋ณํ
json.dumps()
๊ฐ json -> Python ์ด์๋ค๋ฉด, json.loads()
๋ ๋ฐ๋๋ก ๋ณํํด์ค๋ค.
์ด๋ป๊ฒ ๋ณํํด์ค๊น?
json ํ์์ ๋ฌธ์์ด์ ์
๋ ฅ์ผ๋ก ๋ฐ์๋ค์ด๊ณ , Python ๋์
๋๋ฆฌ
์๋ฃํ์ผ๋ก ๋ณํํด์ค!
์ด๋ ๊ฒ ๋ฌธ์์ด์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์ ์ญ์ง๋ ฌํ ๋ผ๊ณ ํ๋ค.
[์์]
import json
json_string = '''{
"id": 1,
"username": "Bret"
}
}'''
assert json_object['id'] == 1
assert json_object['username'] == "Bret"
์ผ๋ฐ์ ์ผ๋ก ํ์ผ์ ์ ์ฅ๋์ด ์๋ JSON ๋ฌธ์์ด์ ์ฝ๊ฑฐ๋, HTTP ์์ฒญ์ ์ ๋ฌธ(body)์ ์ฝ์ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ