Come json.loads
semplicemente restituisce un dizionario, è possibile utilizzare gli operatori che si applicano a 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: per dare un'idea riguardo alle modalità di scorrere i dati, si consideri il seguente esempio:
>>> 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
L'ispezione della struttura dati jdata
consentirà di navigare come desiderato. La chiamata pprint
è già un buon punto di partenza per questo.
Edit2: un altro tentativo. Questo ottiene il file che hai citato in un elenco di dizionari. Con questo, penso che dovresti essere in grado di adattarlo alle tue esigenze.
>>> 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/'},
(...)
}]
Per poi "la ricerca in esso per u'uri': u'http:'
", fare qualcosa di simile:
for c in build_structure(jdata):
if c['uri'].startswith('http:'):
print 'Started with http'
It", linea 3, in ValueError: nome campo lunghezza zero in formato quando provo ad avviare il secondo esempio –
BKovac
Questo è probabilmente correlato al layout dei segnalibri esportati ... Non conosco il formato, ma suppongo che faccia una chiave 'children' per ogni cartella o contenitore che hai nei tuoi segnalibri. Provalo ad esempio con 'for c in jdata ['children']:' invece di quanto sopra. Inoltre, nota che la funzione ''{}'. Format()' è nuova in Python 2.6 ... potresti avere una versione precedente. In tal caso, sostituire la riga con 'print 'Titolo:% s, URI:% s'% (c.get ('titolo', 'Nessun titolo'), c.get ('uri', 'No uri'))) '. – jro
Ancora non funziona Ecco il file bookmakrs http://pastebin.com/uCtECvDi – BKovac