Python Json树更新

记录一段搜索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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值