json google-app-engine webapp2

¿Cómo sacar correctamente JSON con el motor de aplicaciones Python webapp2?



google-app-engine (5)

En este momento estoy haciendo esto:

self.response.headers[''Content-Type''] = ''application/json'' self.response.out.write(''{"success": "some var", "payload": "some var"}'')

¿Hay una mejor manera de hacerlo usando alguna biblioteca?


Python en sí tiene un módulo json , que se asegurará de que su JSON esté formateado correctamente, manuscrito JSON es más propenso a obtener errores.

import json self.response.headers[''Content-Type''] = ''application/json'' json.dump({"success":somevar,"payload":someothervar},self.response.out)


Suelo usar esto así:

class JsonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.isoformat() elif isinstance(obj, ndb.Key): return obj.urlsafe() return json.JSONEncoder.default(self, obj) class BaseRequestHandler(webapp2.RequestHandler): def json_response(self, data, status=200): self.response.headers[''Content-Type''] = ''application/json'' self.response.status_int = status self.response.write(json.dumps(data, cls=JsonEncoder)) class APIHandler(BaseRequestHandler): def get_product(self): product = Product.get(id=1) if product: jpro = product.to_dict() self.json_response(jpro) else: self.json_response({''msg'': ''product not found''}, status=404)


webapp2 tiene un práctico contenedor para el módulo json: usará simplejson si está disponible, o el módulo json de Python> = 2.6 si está disponible, y como último recurso el módulo django.utils.simplejson en App Engine.

http://webapp2.readthedocs.io/en/latest/api/webapp2_extras/json.html

from webapp2_extras import json self.response.content_type = ''application/json'' obj = { ''success'': ''some var'', ''payload'': ''some var'', } self.response.write(json.encode(obj))


Sí, debe usar la biblioteca json compatible con Python 2.7:

import json self.response.headers[''Content-Type''] = ''application/json'' obj = { ''success'': ''some var'', ''payload'': ''some var'', } self.response.out.write(json.dumps(obj))


import json import webapp2 def jsonify(**kwargs): response = webapp2.Response(content_type="application/json") json.dump(kwargs, response.out) return response

Cada lugar que quieras devolver una respuesta json ...

return jsonify(arg1=''val1'', arg2=''val2'')

o

return jsonify({ ''arg1'': ''val1'', ''arg2'': ''val2'' })