▶︎ json
JSON
은 JavaScript Object Notation의 약자로서 데이터를 문자열의 형태로 나타내기 위해서 사용된다.
이름에서 암시하듯이 JSON은 자바스크립트에서 파생되었지만 현재는 프로그래밍과 무관하게 거의 표준으로 자리잡아 이종 시스템 간에 원격으로 데이터를 주고 받을 때 사용되고 있다.
▶︎ json 모듈 실습
‣ loads() 함수
JSON 문자열을 파이썬 객체로 변환하기 위해서는 loads()
함수를 사용한다.
import json
js_string: str = '''{
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
},
{
...
}
]
"alarm": false,
"books": null
}'''
json_object = json.loads(js_string)
assert json_object['id'] == 1
assert json_object['projectName'] == 'parsingTest'
assert json_object['userInfos'][0]['name'] == 'user1'
assert json_object['alarm'] is False
assert json_object['books'] is None
일반적으로 파일에 저장되어 있는 JSON 문자열을 읽거나, HTTP 요청의 body를 읽을 때 자주 사용된다.
‣ dumps() 함수
파이썬의 객체를 JSON 문자열로 변환할 때에는 dumps()
함수를 사용한다.
import json
json_object: dict = {
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
},
],
"alarm": False,
"books": None
}
json_string = json.dumps(json_object)
print(json_string)
{"id": 1, "dir": "/usr/src/app", "projectName": "parsingTest", "userInfos": [{"name": "user1", "password": "****", "nickname": "johhhhh1"}], "alarm": false, "books": null}
dumps()
로 변환되는 JSON 문자열을 위와 같이 한 줄이기 때문에 파이썬 객체가 많은 데이터를 담고 있는 경우 가독성이 매우 떨어질 수 있다.
이런 경우 indent
파라미터에 숫자를 넘기면 그 만큼 들여쓰기가 되어 JSON 문자열로 반환된다.
import json
json_object: dict = {
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
},
],
"alarm": False,
"books": None
}
json_string = json.dumps(json_object, indent=4)
print(json_string)
{
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
}
],
"alarm": false,
"books": null
}
‣ load() 함수
JSON 파일에 저장된 데이터를 읽어서 Python 객체로 불러오고 싶은 경우에는 loads()
대신 load()
함수를 사용한다.
input.json
{
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
}
],
"alarm": false,
"books": null
}
import json
with open('input.json', 'r') as fp:
json_object = json.load(fp)
assert json_object['id'] == 1
assert json_object['projectName'] == 'parsingTest'
assert json_object['userInfos'][0]['name'] == 'user1'
assert json_object['alarm'] is False
assert json_object['books'] is None
JSON 포맷의 HTTP 응답 body를 읽을 때에도 이 방식이 사용된다.
‣ dump() 함수
파이썬 객체를 JSON 문자로 변환한 결과를 파일에 바로 쓰고(write
) 싶은 경우에는 dumps()
대신에 dump()
함수를 사용한다.
import json
json_object: dict = {
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
},
],
"alarm": False,
"books": None
}
with open('output.json', 'w') as fp:
json.dump(json_object, fp=fp, indent=2)
output.json
{
"id": 1,
"dir": "/usr/src/app",
"projectName": "parsingTest",
"userInfos": [
{
"name": "user1",
"password": "****",
"nickname": "johhhhh1"
}
],
"alarm": false,
"books": null
}