Подтвердить что ты не робот

Как декодировать JSON с Python

Я получаю свой JSON от reddit.com, по существу что-то вроде этого. Я проделал довольно много чтения, но я Я действительно понимаю, как я могу захватить информацию, которую я хочу от этого JSON (мне нужен список ссылок на сюжет). Я понимаю, что я могу "расшифровать" JSON в словаре, но нужно ли мне повторять все JSON, чтобы получить то, что мне нужно?

Спасибо заранее.

4b9b3361

Ответ 1

Если вы используете Python 2.6 или более позднюю версию, используйте встроенную библиотеку json. В противном случае используйте simplejson, который имеет точно такой же интерфейс.

Вы можете сделать это адаптивно, не проверяя версию Python самостоятельно, используя следующий код:

try:
    import json
except ImportError:
    import simplejson as json

Затем используйте json.loads() или как угодно.

Ответ 2

import urllib2
import json

u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()

Ответ 3

Я предполагаю, что вы будете разбирать данные в словаре, а затем извлекать из него соответствующие биты.

Вы можете проанализировать json в python, используя соответствующую библиотеку python

Ответ 4

Существует два способа "декодировать" json с Python после того, как вы проанализировали его в dicts и списках с помощью библиотеки json.

Сначала, обратившись к нему по индексам, например:

url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']]

Или вы можете перебирать свою древовидную структуру. Приведенная ниже примерная функция не является общей целью, она просто иллюстрирует, что при анализе дерева необходимо рассматривать JSON три разных типа "узлов" по-разному. Ключевым "значением" могут быть данные, список дочерних узлов без ключей или dict, что в основном новый объект JSON. Вы не можете просто проверить каждый node для его имени, данных и детей, как если бы вы использовали регулярное дерево.

def depthFirstSearch(self, jsonobj, target, parentKey=None):
        if isinstance(jsonobj, dict):
            for key, value in jsonobj.items():
                if isinstance(value, (dict, list)):
                    self.depthFirstSearch(value, target, key)
                else:   # "data" node
                    if key == target and parentKey not in self.parentsToExclude:
                        self.results.append(value)
                        self.parents[parentKey] += 1
        if isinstance(jsonobj, list):
            for value in jsonobj:
                #lists don't have keys, pass along key from last dict
                self.depthFirstSearch(value, target, parentKey)