CherryPy как реагировать с JSON?

в моем контроллере / обработчике запросов у меня есть следующий код:


def monkey(self, **kwargs):
  cherrypy.response.headers['Content-Type'] = "application/json"
  message = {"message" : "Hello World!" }
  return message
monkey.exposed = True

и, на мой взгляд, у меня есть код:


$(function() {
  var body = document.getElementsByTagName("body")[0];
  $.ajaxSetup({ 
    scriptCharset : "utf-8",
    contentType: "application/json; charset=utf-8"
  });
  $.post("http://localhost/wsgi/raspberry/monkey", "somePostData",
    function(data) {
      try{
        var response = jQuery.parseJSON(data);
        body.innerHTML += "<span class='notify'>" + response + "</span>";
      }catch(e){ 
        body.innerHTML += "<span class='error'>" + e + "</span>";
      }
    }
  );
});

и, наконец, вот моя проблема. Я не получаю ответа JSON, и я не уверен, почему.

во-вторых, кто-нибудь сможет объяснить, как форматировать данные в моем ответе контроллера/обработчика запросов как ответ JSON самым простым способом, без использования инструментов?

2 ответов


не уверен, что вы подразумеваете под "без использования инструментов" - в Python is "инструмент", верно?

только с Python и его стандартной библиотекой (2.6 или лучше), добавьте в верхней части вашего модуля

import json

, и return заявление

return json.dumps(message)

поскольку CherryPy 3.2 есть инструменты для приема / возврата JSON:

@cherrypy.expose
@cherrypy.tools.json_out()
def monkey(self, **params):
    return {"message": "Hello World!"}

используя json_out сериализует вывод и задает соответствующий заголовок типа контента для вас.

аналогично украшения с @cherrypy.tools.json_in() может автоматически принимать / декодировать запросы JSON post.