앞에서 단순히 json 사용하여 몇가지 사용법에 대해서 알아보았습니다.
json include
응용하여, json에서 다른 json을 불러올 수 있다면 json 파일의 상속해서 사용 가능합니다.코드로 구현하였습니다.
import json import os import unittest def load_json(filename, depth=0): file = open(filename,"r",encoding='utf-8') jsondata = json.load(file) file.close() abspath = os.path.abspath(os.path.dirname(filename)) include_file_list = jsondata.get("@include_files") if include_file_list==None: return jsondata if depth >=30 : return jsondata for file_list_one in include_file_list: path = os.path.join(abspath,file_list_one) dict = load_json(path,depth+1) jsondata.update(dict) return jsondata class unit_test(unittest.TestCase): def test_1(self): json_data = load_json("test.json") self.assertEqual(json_data["TAG2"],3000) self.assertEqual(json_data["TAG1"],10) return if __name__ == '__main__': unittest.main()
test.json
{ "TAG1":10, "TAG2":20, "@include_files":["test2.json"] }
test2.json
{ "TAG2":3000 }
여기에서 주요 코드는 abspath를 구하는 부분입니다. 현재 json 파일의 경로를 구해서 원하는 파일의 이름과 합쳐 줍니다. 이것은 os.path.join 함수를 이용해서 구현하였습니다.
그리고 json 데이터의 업데이트는 jsondata로 합쳐지게 됩니다.
중첩 inclulde는 depth가 최대 30개까지만 처리가 되도록 구현하였습니다.
댓글 없음:
댓글 쓰기