从reddit的API使用Python中PRAW解码JSON(Decoding JSON from

2019-09-23 11:19发布

我使用PRAW在一个Python / GTK应用reddit的API。 我已经成功地使用API​​,但我似乎无法能够将JSON用于解码。 应该知道,我在Python和GTK应用初学者。

# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
### BEGIN LICENSE
# This file is in the public domain
### END LICENSE

import gettext
from gettext import gettext as _
gettext.textdomain('redditreader')

from gi.repository import Gtk # pylint: disable=E0611
import logging
logger = logging.getLogger('redditreader')

from redditreader_lib import Window
from redditreader.AboutRedditreaderDialog import AboutRedditreaderDialog
from redditreader.PreferencesRedditreaderDialog import PreferencesRedditreaderDialog

import praw

import json
import simplejson
from pprint import pprint

# See redditreader_lib.Window.py for more details about how this class works
class RedditreaderWindow(Window):
    __gtype_name__ = "RedditreaderWindow"

    def finish_initializing(self, builder): # pylint: disable=E1002
        """Set up the main window"""
        super(RedditreaderWindow, self).finish_initializing(builder)

        self.AboutDialog = AboutRedditreaderDialog
        self.PreferencesDialog = PreferencesRedditreaderDialog

        # Code for other initialization actions should be added here.
r = praw.Reddit(user_agent='example')
try:
    submissions = r.get_front_page(limit=5)
    [str(x) for x in submissions]
    jsondatafirst = simplejson.loads(str(submissions))
    jsondata = unicode(jsondatafirst, 'utf-8')
    print(jsondata)
except (simplejson.decoder.JSONDecodeError, ValueError):
    print 'Decoding JSON has failed'

Answer 1:

随着PRAW你不需要做任何的JSON解码为PRAW处理所有的为你。

例如说,你要打印出upvotes的数量,downvotes的数量,并提交标题中各个提交。 你可以这样做:

for submission in r.get_front_page(limit=5):
    print submission.ups, submission.downs, submission.title

如果你想看到所有可用的提交对象,你可以运行使用的属性:

import pprint
for submission in r.get_front_page(limit=5):
    pprint.pprint(vars(submission))

此外,如果你想从提交的意见,那么你可以使用submission.comments属性。 您也可以手动看看在看什么属性应该通过PRAW(可请求JSON响应例子 )。

属性没有明确任何地方列出的对象,因为该属性是从任何键的名称是在请求相关的JSON响应直接创建。



Answer 2:

JSON是简单的字典,用列表扩展,如果需要的字典。

一个好方法,以熟悉任何JSON你处理此刻正在加载它,并通过访问更直接的方式字典元素玩弄它。

>>> import urllib2
>>> import json
>>> response = urllib2.urlopen('http://reddit.com/user/droogans.json').read()
>>> js = json.loads(response)
>>> comment = js['data']['children'][0]['data']
>>> #this is my most recent comment, along with a lot of other interesting stuff
>>> print comment['ups']
9001

因此,探索数据,你会更好地理解它。



文章来源: Decoding JSON from Reddit API in Python using PRAW