【问题标题】:simplejson.loads usagesimplejson.loads 用法
【发布时间】:2011-08-02 16:21:14
【问题描述】:

我想从 RSS 提要中显示一个随机链接 + 其名称。 我使用的代码是:

def updateFeed(url):
    query_args = { 'q': 'http://news.google.com/?output=rss', 'v':'1.0', 'num': '15', 'output': 'json' }
    qs = urllib.urlencode(query_args)
    loader = 'http://ajax.googleapis.com/ajax/services/feed/load'
    loadurl = '%s?%s' % (loader, qs)
    logging.info(loadurl)
    result = urlfetch.fetch(url=loadurl,
                            headers={'Referer': '...'})
    if result.status_code == 200:
                news = simplejson.loads(result.content) 

我确实获得了 JSON 格式的响应数据,但我不知道如何随机选择一个项目。可以请教吗?

{u'responseData': {u'feed': {u'feedUrl': u'http://news.google.com/?output=rss', u'description': u'Google News', u'author': u'', u'title': u'Top Stories - Google News', u'link': u'http://news.google.com/news?pz=1&amp;jfkl=true&amp;ned=us&amp;hl=en', u'entries': [{u'publishedDate': u'Tue, 02 Aug 2011 08:51:09 -0700', u'title': u'House Approved Debt Bill Faces Final Hurdle - NY1', u'author': u'', u'content': u'<table border="0" cellpadding="2" cellspacing="7" style="vertical-align:top"><tr><td width="80" align="center" valign="top"><font style="font-size:85%;font-family:arial,sans-serif"><a href="http://news.google.com/news/url?sa=t&amp;fd=R&amp;usg=AFQjCNEyXr4E-W9lA8bsV4_Zslubxd-6_g&amp;url=http://www.theglobeandmail.com/news/world/americas/little-sign-of-compromise-ahead-of-us-default-deadline/article2114420/"><img src="http://nt3.ggpht.com/news/tbn/dyFy2sz6rKRlJM/6.jpg" alt="" border="1" width="80" height="80"><br><font size="-2">Globe and Mail</font></a></font></td><td valign="top"><font style="font-size:85%;font-family:arial,sans-serif"><br><div style="padding-top:0.8em"><img alt="" height="1" width="1"></div><div><a 

编辑:它现在工作得几乎完美,我了解 JSON 这样做:

def updateFeed(url):
    query_args = { 'q': 'http://news.google.com/?output=rss', 'v':'1.0', 'num': '15', 'output': 'json' }
    qs = urllib.urlencode(query_args)
    loader = 'http://ajax.googleapis.com/ajax/services/feed/load'
    loadurl = '%s?%s' % (loader, qs)
    logging.info(loadurl)
    result = urlfetch.fetch(url=loadurl,headers={'Referer': '...'})
    if result.status_code == 200:
        news = simplejson.loads(result.content) 

        """ not working, using random.randrange instead
        some_key = random.choice(news.keys())
        something = news[some_key]
        """
        i = random.randrange(0,10)#to do: instead of 10, it should be number of entries
        title = news[u'responseData'][u'feed'][u'entries'][i][u'title']
        link = news[u'responseData'][u'feed'][u'entries'][i][u'link']
    return mark_safe('<a href="%s">%s</a>' % (link, title))

【问题讨论】:

    标签: python json rss simplejson


    【解决方案1】:

    当您在 Python 中加载 JSON 时,它会转换为(嵌套的)字典和列表。 { ... } 对象变成字典,[ ... ] 逗号分隔的项目变成列表。

    例如,要获取提要 URL,您可以:

    feedUrl = news[u'responseData'][u'feed'][u'feedUrl']
    

    要从字典中选择一个随机元素,您可以:

    import random
    some_key = random.choice(news.keys())
    something = news[some_key]
    

    【讨论】:

    • 太棒了!最后我可以理解如何遍历 JSDON 结构了。我用几乎完美的代码更新了这个问题。这只是我无法获得正确数量的条目的随机元素,但这应该不会太难。
    • @Niklas:您似乎需要数组中的随机元素(我的示例是用于字典)。您可以使用内置的len 函数获取列表的长度,例如:i = random.randrange(len(news[u'responseData'][u'feed'][u'entries']))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2020-07-31
    相关资源
    最近更新 更多