2019년 11월 10일 일요일

pythond에서 json 다루기 (2) json include


앞에서 단순히 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개까지만 처리가 되도록 구현하였습니다.






























댓글 없음:

댓글 쓰기