记录一段搜索Json树的代码,用于返回指定的节点并更新,因为Python返回的字典是对象引用,所以可以直接更新。
class BaseJsonGenerator(object):
def __init__(self):
self.bmDao = BMDao()
def run(self, brower, jsonFile):
self.bmDict = []
result = self.bmDao.getCurrent()
for bm in result:
block = {}
block['id'] = bm.bid
block['name'] = bm.title
block['type'] = bm.btype
block['date_added'] = bm.createTime
if bm.btype == 'url':
block['meta_info'] = {}
block['meta_info']['last_visited_desktop'] = bm.lastVisitTime
block['url'] = bm.url
else:
block['children'] = []
block['date_modified'] = bm.updateTime
if bm.pid > 0:
self.searchPid = bm.pid
if bm.pid == 2 :
print("test")
parentBlock = self.getParentBlock()
parentBlock['children'].append(block)
else:
self.bmDict.append(block)
pprint.pprint(self.bmDict)
with open(jsonFile, 'r', encoding='utf8') as f:
content = f.read()
self.bookmarks = json.loads(content, encoding='utf8')
self.bookmarks['roots']['bookmark_bar']['children'] = self.bmDict
with open(jsonFile, 'w', encoding='utf-8') as f:
f.write(json.dumps(self.bookmarks, ensure_ascii=False, indent=2))
def getParentBlock(self, currBlock=None):
i = 0
if currBlock == None:
currBlock = self.bmDict
for block in currBlock:
if block['id'] == self.searchPid:
return currBlock[i]
if block.get('children') != None:
parentBlock = self.getParentBlock(currBlock[i]['children'])
if parentBlock:
return parentBlock
i += 1