Как декодировать JSON с помощью Python - PullRequest
19 голосов
/ 25 февраля 2010

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

Заранее спасибо.

Ответы [ 4 ]

23 голосов
/ 25 февраля 2010

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

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

try:
    import json
except ImportError:
    import simplejson as json

Затем используйте json.loads() или что-то еще, в зависимости от ситуации.

13 голосов
/ 25 февраля 2010
import urllib2
import json

u = urllib2.urlopen('http://www.reddit.com/.json')
print json.load(u)
u.close()
0 голосов
/ 07 сентября 2015

Есть два способа, которыми вы можете «декодировать» json с помощью Python, после вы разбили его на dicts и списки с помощью библиотеки json.

Во-первых, доступ к нему по индексам, например:

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

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

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)
0 голосов
/ 25 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...