Programming,  Python

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

Leave a Reply

Your email address will not be published. Required fields are marked *