[Python] JSON 파일 활용
프로그램을 수행 할 때 object를 항상 처음부터 만들면 초기 수행 시간이 불필요하게 수행될 경우가 종종 존재한다. 따라서 이럴 경우 기존에 object를 reuse 할 필요가 있는데 Python에선 이런 경우 json 파일을 활용하면 좋다.
JSON (JavaScript Object Notation) 파일은 사람이 읽을 수 있는 format으로 attribute-value를 쌍으로 이루어진 object를 전달하기 위한 표준 format이다.
JSON Write
JSON 파일을 생성하는 간단한 방법은 다음과 같다.
# json.dump([Variable], [File Descriptor])
with open(FILE_NAME, "w", encoding="utf-8") as f:
json.dump(group_data, f, ensure_ascii=False, indent="\t")
참고로 ensure_ascii 옵션은 유니코드가 ASCII 문자로 변환되지 않게 하고, indent옵션은 가독성을 높이기 위해 indentation을 주는 것이다.
JSON Read
# [Return] = json.load([File Descriptor])
with open(FILE_NAME, "r", encoding="utf-8") as f:
data = json.load(f, object_pairs_hook=OrderedDict)
object_pairs_hook=OrderedDict은 순서를 맞게끔 불러오기 위해서 사용한 옵션이다.
Example
#!/user/dvutil/opt/bin/python
import json
from collections import OrderedDict
FILE_NAME = "jsonFile.json"
def main():
# Ready for data
group_data = OrderedDict()
member_info = OrderedDict()
group_data["Fruits"] = ["Apple", "Banana", "Orange"]
group_data["Alphabet"] = ("A", "B", "C", "D", "E", "F")
member_info["Paul"] = 1001
member_info["Arial"] = 1002
member_info["Victor"] = 1003
member_info["Rogun"] = 1004
group_data["People"] = member_info
with open(FILE_NAME, "w", encoding="utf-8") as f:
json.dump(group_data, f, ensure_ascii=False, indent="\t")
try:
with open(FILE_NAME, "r", encoding="utf-8") as f:
data = json.load(f, object_pairs_hook=OrderedDict)
except:
print("ERROR")
print(data)
if __name__ == "__main__":
main()
OrderedDict([(‘Fruits’, [‘Apple’, ‘Banana’, ‘Orange’]), (‘Alphabet’, [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’]), (‘People’, OrderedDict([(‘Paul’, 1001), (‘Arial’, 1002), (‘Victor’, 1003), (‘Rogun’, 1004)]))])
# jsonFile.json
{
"Fruits": [
"Apple",
"Banana",
"Orange"
],
"Alphabet": [
"A",
"B",
"C",
"D",
"E",
"F"
],
"People": {
"Paul": 1001,
"Arial": 1002,
"Victor": 1003,
"Rogun": 1004
}
}
위 결과를 통해 tuple 타입으로 object를 만들더라도 나중엔 list type으로 저장되는 것을 확인 할 수 있다.