2012-07-27 30 views
9

Tornado kullanarak python'da bir JSON nesnesinin nasıl çıkarılacağı hakkında bir fikir. Herhangi bir iyi örnek, öğretici, kitaplık veya bir JSONP nesnesini çıkaran bir satır kodu.tornado Jsonp nesnesi

Sen sınıfı kayıt bu şekilde

import json 

class GetYearsHandler(tornado.web.RequestHandler): 
    def get(self): 
     try: 
      response = get_years(self.get_argument("dataset_id")) 
      result = {'status':'success', 'response': response} 
      kk = tornado.escape.json_encode(result) 
      kk = wrap_callback(self, kk) 
      self.write(kk) 
     except Exception, e: 
      print >> sys.stderr, "Error occured:\n%s" % format_exc() 
      self.write(json.dumps({'status': 'fail', 'error': "Error occured:\n%s" % format_exc()})) 

def get_years (dataset_id): 
    dates=[] 
    years=[] 
    conn = condb() 
    cur = conn.cursor() 
    data = {'dataset_id':dataset_id} 
    cur.execute("SELECT layers.start_time FROM layers, datasets WHERE (layers.dataset_id=datasets.id) AND (datasets.business_id=%(dataset_id)s)",data) 
    for row in cur.fetchall(): 
     dates.append(row[0]) 
    date="" 
    for date in dates: 
     year = int(date.year) 
     if not year in years: 
      years.append(year) 
    conn.close() 
    years.sort() 
    return years 

yılında json obj döndürebilir

cevap

22

Tornado tornado.escape.json_encode sağlar veritabanı bağlantısı vardır 2.6+ veya Python 2.5 üzerinde simplejson.

from tornado.escape import json_encode 
obj = { 
    'foo': 'bar', 
    '1': 2, 
    'false': True 
    } 
self.write(json_encode(obj)) 

çıkışlar: Bir JSONP yanıt alabilmek için

{"1": 2, "foo": "bar", "false": true} 

:

callback = self.get_argument('callback') 
jsonp = "{jsfunc}({json});".format(jsfunc=callback, 
    json=json_encode(obj)) 
self.set_header('Content-Type', 'application/javascript') 
self.write(jsonp) 
Kullanımı basit
1

def main(db_fn=None): 

    tornado.options.parse_command_line() 
    application = tornado.web.Application([ 
    (r"/get_datasets", GetDatasetsHandler), 
    (r"/get_years", GetYearsHandler), 
) 

bağl - basitçe Python üzerinde json sarar