工作需要,学了2天python
#! /bin/env python2
# coding: utf-8
'netnode_list序列化json模块'
import json
from topology import NetNode
OUTPUT_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 l
class 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!")