2011-09-01 9 views
0

私は、Twitterの傾向JSONを引き出し、解析し、フォーマットするためにPythonスクリプトを使用しています。場所の特定のフォーマットは、アレイ内の動向をネスト:複数の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) 

これは、ロケーションフォーマット(最初)では有効ですが、日次/週次フォーマットでは機能しません。だから私は2つのJSON構造を区別して再構造化するスマートな方法があるかどうか疑問に思っています。

答えて

0

より一般的なケースは、リストのあるケースです。 最初の要素だけが必要なので、解析されたオブジェクトがリストの場合は、最初の値を抽出します。あなたのコードで

、あなたは簡単に置き換えることができます。

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

if isinstance(trends_all, list): 
    trends_all = trends_all[0] 
for x in trends_all['trends']: 
    ... 
関連する問題