[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으로 저장되는 것을 확인 할 수 있다.