2010-08-17 20 views
24

Làm cách nào để chuyển về dữ liệu json từ trình xử lý yêu cầu chai. Tôi thấy một phương pháp dict2json trong chai src nhưng tôi không chắc chắn làm thế nào để sử dụng nó.Chai và Json

là gì trong tài liệu:

@route('/spam') 
def spam(): 
    return {'status':'online', 'servertime':time.time()} 

Cung cấp cho tôi điều này khi tôi đưa lên trang:

<html> 
    <head></head> 
    <body>statusservertime</body> 
</html> 
+1

I chuyển sang bình và nó hoạt động tốt. – arinte

+0

Bạn cũng có thể sử dụng nhập json sau đó json.dumps (dict). Nhưng di chuyển tốt, tôi cũng đi giữa chai và bình và cuối cùng chọn bình. Tôi thích chai được nhẹ và không có một khuôn khổ lớn hơn đằng sau nó. Nhưng những thứ như thông số url đã nhập luôn giành được tôi trở lại để thực hiện những việc như phát hiện ngày hoặc lập chỉ mục tức là/blog/////Nơi chai chỉ có: tên param. Vì vậy, đường dẫn có 4 dấu gạch chéo không phải lúc nào cũng là url loại ngày/blog. Tôi sử dụng cả hai nhưng có xu hướng bình cho các ứng dụng lớn hơn hiện nay do những thứ như thế này. –

+0

Tôi cũng gặp vấn đề này. Khi tôi sử dụng curl -I, tôi thấy rằng loại nội dung sai: Content-Type: text/html; charset = UTF-8 –

Trả lời

43

Đơn giản chỉ cần trả về một dict. Chai xử lý chuyển đổi sang JSON cho bạn.

Ngay cả từ điển cũng được phép. Chúng được chuyển thành json và được trả về với tiêu đề Content-Type được đặt thành application/json. Để vô hiệu hóa tính năng này (và chuyển dicts đến middleware của bạn), bạn có thể đặt bottle.default_app(). Autojson thành False.

@route('/api/status') 
def api_status(): 
    return {'status':'online', 'servertime':time.time()} 

Taken từ the documentation.

http://bottlepy.org/docs/stable/api.html#the-bottle-class

+2

Điều này không thực sự trả lời câu hỏi –

+4

Cái gì? Nó chắc chắn không ... –

3

return {'status':'online', 'servertime':time.time()} công trình hoàn toàn tốt cho tôi. Bạn đã nhập time chưa?

này hoạt động:

import time 
from bottle import route, run 

@route('/') 
def index(): 
    return {'status':'online', 'servertime':time.time()} 

run(host='localhost', port=8080) 
+0

Điều đó không hiệu quả đối với tôi. Tôi đã nhập thời gian. Tôi đoán đó là sự thay đổi hành vi liên quan đến phiên bản. –

6

Đối với một số lý do, tính năng tự động json chai của không làm việc cho tôi. Nếu nó không làm việc cho bạn một trong hai, bạn có thể dùng trang trí này:

def json_result(f): 
    def g(*a, **k): 
     return json.dumps(f(*a, **k)) 
    return g 

Cũng có ích:

def mime(mime_type): 
    def decorator(f): 
     def g(*a, **k): 
      response.content_type = mime_type 
      return f(*a, **k) 
     return g 
    return decorator 
+0

Điều này làm việc tuyệt vời để tôi trả lại các bộ từ điển, không được xử lý bởi Chai –

+1

Bạn không nên trả lại danh sách từ điển, đó là lý do khiến chai khó khăn (và Flask). Xem tại đây: http://flask.pocoo.org/docs/security/#json-security –

+0

Wow, cảm ơn vì đã chỉ ra điều đó. –

0

thử nên tác phẩm này như dự định

from bson.json_util import dumps 
from bottle import route, run 
import time 

@route('/') 
def index(): 
    return {'status':'online', 'servertime':dumps(time.time()) } 

run(host='localhost', port=8080) 
0

nó rất dễ dàng để lấy json sử dụng mô-đun yêu cầu của chai

from bottle import request 

json_data = request.json # json_data is in the dictionary format 
Các vấn đề liên quan