工作需要,學了2天python
#! /bin/env python2# coding: utf-8'netnode_list序列化json模組'import jsonfrom topology import NetNodeOUTPUT_JSON_FILE = '../data/topology.json'class NetNodeListEncoder(json.JSONEncoder): """拓撲列表序列化json類 """ def default(self, obj): """轉化方法 """ if not isinstance(obj,WrapNetNodeListEncoder): raise ValueError('NetNodeListEncoder::param type err!') return self._recurse(obj.net_node_list) def _recurse(self, list=[]): """遞迴轉化 """ l = [] if list: for net_node in list: d = net_node.__dict__ if net_node.sub_net: d['sub_net'] = self._recurse(net_node.sub_net) else: del(d['sub_net']) l.append(d) return lclass WrapNetNodeListEncoder(object): """封裝jsonencoder exp: encoder = WrapNetNodeListEncoder(netnode_list) encoder.encode() # 轉碼 encoder.write_json() # 寫json檔案 """ def __init__(self,list=[]): self.net_node_list = list; self.json_str = '' def encode(self): """調用NetNodeListEncoder的encode """ self.json_str = NetNodeListEncoder().encode(self) return self.json_str def write_json(self): """寫json檔案 """ if self.json_str.strip(): with open(OUTPUT_JSON_FILE, 'wt', encoding='utf-8') as fd: fd.write(self.json_str) else: print("WrapNetNodeListEncoder::write_json json_str is empty!")