Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用多种JSON格式?_Python_Json_Twitter - Fatal编程技术网

Python 如何使用多种JSON格式?

Python 如何使用多种JSON格式?,python,json,twitter,Python,Json,Twitter,我正在使用python脚本来提取、解析和格式化Twitter趋势JSON。特定于位置的格式将趋势嵌套在数组中: [ { "created_at": "2010-07-15T22:31:11Z", "trends": [ { "name": "trendy", "url": "http://search.twitter.com/search?q=trendy", "query": "trendy" }, .

我正在使用python脚本来提取、解析和格式化Twitter趋势JSON。特定于位置的格式将趋势嵌套在数组中:

[
  {
    "created_at": "2010-07-15T22:31:11Z",
    "trends": [
      {
        "name": "trendy",
        "url": "http://search.twitter.com/search?q=trendy",
        "query": "trendy"
      }, ...
而每日和每周json格式不:

{
  "trends": {
    "2011-01-14 15:20": [
      {
        "name": "#trendy",
        "events": null,
        "promoted_content": null,
        "query": "#trendy"
      },
我用这个python列出了趋势:

class trend:
        #initialize a "trend" object with foo = trend(query,name ...)
        def __init__(self, query, name, promoted_content, events, url):
                self.query = query
                self.name = name
                self.promoted_content = promoted_content
                self.events = events
                self.url = url 

class trending:
        def __init__(self,api_url,title):
                self.api_url = api_url
                self.title = title

        def get_trending(self):
                import simplejson as json
                import urllib2

                trends_all = json.loads(urllib2.urlopen(self.api_url).read())
                return trends_all

        def list_trending(self):
                trends_all = self.get_trending()
                print "%s\n" % self.title

                for x in trends_all[0]['trends']:
                    thistrend = trend(x['query'], x['name'], x['promoted_content'], x['events'], x['url'])
                    print "\t %s (%s) %s" %(thistrend.name, thistrend.url, thistrend.promoted_content)

这适用于第一种位置格式,但不适用于每日/每周格式。所以我想知道是否有一种聪明的方法来区分这两个JSON结构并重新构造它们,这样我就可以同时使用这两个结构。

更通用的情况是带有列表的情况。 因为您只需要第一个元素,如果解析的对象是一个列表,则提取第一个值

在代码中,您可以简单地替换:

for x in trends_all[0]['trends']:
    ...

if isinstance(trends_all, list):
    trends_all = trends_all[0]
for x in trends_all['trends']:
    ...