使用PRAW从Python中的redditapi解码JSON

2024-05-16 21:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python/GTK应用程序中使用prawforredditapi。我已经成功地使用了这个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'

Tags: fromimportselfjson应用程序gtkforwindow
2条回答

JSON只是一个字典字典,如果需要,可以用列表进行扩展。在

熟悉目前正在处理的JSON的一个好方法是加载它,并通过以更直接的方式访问dictionary元素来处理它。在

>>> 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

所以,研究一下数据,你会更好地理解它。在

你不需要像PRAW那样处理任何json解码。在

例如,对于每个要打印出赞成票、反对票和提交标题的提交文件。你可以:

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

如果要查看可用于提交对象的所有属性,可以运行:

^{pr2}$

另外,如果您想从提交中获得评论,那么您可以使用submission.comments属性。您还可以手动查看请求的json响应,看看PRAW(example)应该有哪些属性可以使用。在

这些属性没有显式地列出对象的任何位置,因为属性是直接从请求的关联json响应中的键名称创建的。在

相关问题 更多 >