2012-07-27 23 views
9

cualquier idea sobre cómo generar un objeto JSON en python utilizando Tornado. Cualquier buen ejemplo, tutorial, bibliotecas o un código de línea que genere un objeto JSONP.tornado escribe un objeto Jsonp

Respuesta

22

Tornado ofrece tornado.escape.json_encode, que simplemente se envuelve json en Python 2.6+ o simplejson en Python 2.5. Es muy sencillo de utilizar:

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

salidas:

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

Para una respuesta JSONP:

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

Usted puede volver obj JSON de esa manera

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 

para registrar la clase

def main(db_fn=None): 

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

conn - es la conexión de base de datos