Deencoding de JSON desde la API de Reddit en Python utilizando PRAW

Estoy utilizando PRAW para Reddit API en una aplicación Python / GTK. He tenido éxito al usar la API, pero parece que no puedo decodificar el JSON para su uso. Se debe saber que soy un principiante en aplicaciones Python y 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' 

Con PRAW, no necesita realizar ninguna deencoding json, ya que PRAW se encarga de todo eso por usted.

Digamos, por ejemplo, para cada envío que desea imprimir el número de votos positivos, el número de votos negativos y el título del envío. Podrías hacerlo:

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

Si desea ver todos los atributos disponibles para usar en un objeto de envío, puede ejecutar:

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

Además, si desea obtener los comentarios de un envío, entonces puede usar la propiedad submission.comments . También puede ver manualmente la respuesta json para una solicitud para ver qué atributos deberían estar disponibles a través de PRAW ( ejemplo ).

Los atributos no se enumeran explícitamente en ningún lugar para los objetos porque los atributos se crean directamente desde el nombre de la clave en la respuesta json asociada para la solicitud.

JSON es simplemente un diccionario de diccionarios, extendido con listas, si es necesario.

Una buena manera de familiarizarse con cualquier JSON con el que esté tratando en este momento es cargarlo y jugar con él accediendo a los elementos del diccionario de una manera más directa.

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

Entonces, explora los datos, y lo entenderás mejor.