Разложение и декодирование вложенного словаря / JSON - PullRequest
1 голос
/ 27 ноября 2010

В моем приложении я подключаюсь к серверу, который возвращает некую строку в стиле json, напоминающую словарь словарей.В результате я хотел бы получить один выровненный словарь с id в качестве ключа и значением Юникода, например:

{'1': u'autos','3': u'cities'}

Поэтому я загружаю ответ встроенным модулем json:

>>> jsonData = json.loads(data)
>>> jsonData
{u'1': {u'id': u'1', u'name': u'autos'}, u'3': {u'id': u'3', u'name': u'cities'}, u'2': {u'id': u'2', u'name': u'business'},}
>>> type(jsonData)
<type 'dict'>

Вы можете увидеть возвращенный объект здесь.Затем я должен разложить его, чтобы избавиться от родительского словаря.И, наконец, кодировать идентификаторы.Я нашел два метода, как сделать кодирование.Один:

>>> import unicodedata
>>> unicodedata.normalize('NFKD', data).encode('ascii','ignore')

и второй:

>>> data.encode('ascii','ignore')

Как мне следует выполнить эту задачу, особенно разложение?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2010

Это должно работать:

outputdata = {}
for id, stuff in jsonData.iteritems():
    outputdata[id.encode("ascii")] = stuff[u"name"]

Вы также можете использовать выражение генератора, как в ответе Дугреса.

0 голосов
/ 27 ноября 2010
decomp=dict((v['id'], v['name']) for v in jsondata.values())
...