1

我有一个 Google Chrome 书签文件,它是 JSON 格式

{
   "checksum": "b884cbfb1a6697fa9b9eea9cb2054183",
   "roots": {
      "bookmark_bar": {
         "children": [ {
            "date_added": "12989159740428363",
            "id": "4",
            "name": "test2",
            "type": "url",
            "url": "chrome://bookmarks/#1"
         } ],
         "date_added": "12989159700896551",
         "date_modified": "12989159740428363",
         "id": "1",
         "name": "bookmark_bar",
         "type": "folder"
      },
      "other": {
         "children": [ {
            "date_added": "12989159740428363",
            "id": "4",
            "name": "test",
            "type": "url",
            "url": "chrome://bookmarks/#1"
         } ],
         "date_added": "12989159700896557",
         "date_modified": "0",
         "id": "2",
         "name": "aaa",
         "type": "folder"
      },
      "synced": {
         "children": [  ],
         "date_added": "12989159700896558",
         "date_modified": "0",
         "id": "3",
         "name": "bbb",
         "type": "folder"
      }
   },
   "version": 1
}

并以 Python 格式:

{'checksum': 'b884cbfb1a6697fa9b9eea9cb2054183', 'version': 1, 'roots': {'synced': {'name': 'bbb', 'date_modified': '0', 'children': [], 'date_added': '12989159700896558', 'type': 'folder', 'id': '3'}, 'bookmark_bar': {'name': 'bookmark_bar', 'date_modified': '12989159740428363', 'children': [{'url': 'chrome://bookmarks/#1', 'date_added': '12989159740428363', 'type': 'url', 'id': '4', 'name': 'test2'}], 'date_added': '12989159700896551', 'type': 'folder', 'id': '1'}, 'other': {'name': 'aaa', 'date_modified': '0', 'children': [{'url': 'chrome://bookmarks/#1', 'date_added': '12989159740428363', 'type': 'url', 'id': '4', 'name': 'test'}], 'date_added': '12989159700896557', 'type': 'folder', 'id': '2'}}}

我现在正在写一个书签管理器。我想按名称移动网页。例如: mv /bookmark_bar/test2 /other/test2

但是每个网页都是字典,它们都在一个列表中。所以,我必须使用索引来定位网页,我无法通过名称定位它们

有任何想法吗?

4

3 回答 3

2

这是你需要的https://gist.github.com/3332055吗?

于 2012-08-12T14:23:28.497 回答
0
# -*- coding: utf-8 -*-
import json
def hook(pairs):
    o = {}
    for k, v in pairs.iteritems():
        o[str(k)] = v
    return o

jsonString = """{"a":"a","b":"b","c":{"c1":"c1","c2":"c2"}}"""
r = json.loads(jsonString, object_hook=hook)


assert r['c']['c1'] == "c1"
del r['c']['c1']
assert not r['c'].has_key('c1')
于 2012-08-12T17:19:06.400 回答
0

如何迭代结构的一个例子——你想用它做什么,取决于你:

for root, val in bm['roots'].iteritems():
    print root, 'is named', val['name']
    for child in val['children']:
        print '\t', child['name'], 'is at', child['url']
于 2012-08-12T14:28:43.620 回答