2012-09-30 26 views

Trả lời

57

Vâng, bạn nên sử dụng json library được hỗ trợ bằng 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)) 
+2

Doh! Tôi đã sử dụng 'self.response.headers ['Content-Type:'] = 'application/json'' tất cả các thời gian và kéo strin của tôi .. lông. Vô tình thêm một dấu hai chấm ở đó. – Jonny

12

python bản thân đã một json module, mà sẽ đảm bảo rằng JSON của bạn được định dạng đúng, viết tay JSON là dễ hơn để có được các lỗi .

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

tôi có thể sai nhưng tôi nghi ngờ điều này thực sự hoạt động theo cách này. tại sao bạn chuyển 'self.response.out' vào hàm' dump' làm đối số? – aschmid00

+12

Nó hoạt động theo cách đó. self.response.out là một luồng và dump() lấy một luồng làm đối số thứ hai của nó. (Có thể bạn đang bối rối bởi sự khác biệt giữa dump() và dumps()?) –

31

webapp2 có một wrapper tiện dụng cho các mô-đun json: nó sẽ sử dụng simplejson nếu có, hoặc các module json từ Python> = 2,6 nếu có, và như một nguồn tài nguyên cuối cùng module django.utils.simplejson trên App Động cơ.

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)) 
0
import json 
import webapp2 

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

Mỗi nơi bạn muốn quay trở lại một phản ứng json ...

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

hoặc

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

Tôi thường sử dụng như thế này:

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) 
Các vấn đề liên quan