Như json.loads
chỉ đơn giản là trả về một dict, bạn có thể sử dụng các toán tử áp dụng cho dicts:
>>> jdata = json.load('{"uri": "http:", "foo", "bar"}')
>>> 'uri' in jdata # Check if 'uri' is in jdata's keys
True
>>> jdata['uri'] # Will return the value belonging to the key 'uri'
u'http:'
Edit: để cung cấp cho một ý tưởng về làm thế nào để lặp qua các dữ liệu, hãy xem xét ví dụ sau:
>>> import json
>>> jdata = json.loads(open ('bookmarks.json').read())
>>> for c in jdata['children'][0]['children']:
... print 'Title: {}, URI: {}'.format(c.get('title', 'No title'),
c.get('uri', 'No uri'))
...
Title: Recently Bookmarked, URI: place:folder=BOOKMARKS_MENU(...)
Title: Recent Tags, URI: place:sort=14&type=6&maxResults=10&queryType=1
Title: , URI: No uri
Title: Mozilla Firefox, URI: No uri
Kiểm tra cấu trúc dữ liệu jdata
sẽ cho phép bạn điều hướng nó theo ý muốn. Cuộc gọi pprint
bạn đã có là điểm khởi đầu tốt cho việc này.
Chỉnh sửa2: Một lần thử khác. Điều này nhận được tệp bạn đã đề cập trong danh sách từ điển. Với điều này, tôi nghĩ rằng bạn sẽ có thể thích nghi nó với nhu cầu của bạn.
>>> def build_structure(data, d=[]):
... if 'children' in data:
... for c in data['children']:
... d.append({'title': c.get('title', 'No title'),
... 'uri': c.get('uri', None)})
... build_structure(c, d)
... return d
...
>>> pprint.pprint(build_structure(jdata))
[{'title': u'Bookmarks Menu', 'uri': None},
{'title': u'Recently Bookmarked',
'uri': u'place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&(...)'},
{'title': u'Recent Tags',
'uri': u'place:sort=14&type=6&maxResults=10&queryType=1'},
{'title': u'', 'uri': None},
{'title': u'Mozilla Firefox', 'uri': None},
{'title': u'Help and Tutorials',
'uri': u'http://www.mozilla.com/en-US/firefox/help/'},
(...)
}]
Để rồi "tìm kiếm thông qua nó cho u'uri': u'http:'
", làm một cái gì đó như thế này:
for c in build_structure(jdata):
if c['uri'].startswith('http:'):
print 'Started with http'
Nó", dòng 3, trong ValueError: không có tên trường có độ dài bằng định dạng khi tôi cố gắng bắt đầu ví dụ thứ hai –
BKovac
Điều đó có thể liên quan đến bố cục của các dấu trang bạn đã xuất ... Tôi thực sự không biết định dạng, nhưng tôi đoán nó sẽ tạo một khóa 'trẻ em' cho mỗi thư mục hoặc vùng chứa bạn có trong dấu trang của mình. Hãy thử ví dụ với 'for c trong jdata ['children']:' thay vì ở trên. Ngoài ra, lưu ý rằng hàm ''{}'. Format()' là mới trong Python 2.6 ... bạn có thể có một phiên bản cũ hơn. Nếu vậy, thay thế dòng đó bằng 'print 'Tiêu đề:% s, URI:% s'% (c.get ('title', 'No title'), c.get ('uri', 'No uri')) '. – jro
Vẫn không hoạt động Dưới đây là tệp sổ sách http://pastebin.com/uCtECvDi – BKovac