¿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'' })