title: How to receive JSON in a POST request in CherryPy?
body: <p>How to receive JSON from POST requests in CherryPy?  </p>
  
  <p>I've been to <a href="http://docs.cherrypy.org/dev/refman/lib/jsontools.html" rel="noreferrer">this page</a>, and though it does a good job explaining the API, its parameters, and what it does; I can't seem to figure out how to use them to parse the incoming JSON into an object.</p>
  
  <p>Here's what I have so far: </p>
  
  <pre><code>
  
  import cherrypy
  import json
  
  from web.models.card import card
  from web.models.session import getSession
  from web.controllers.error import formatEx, handle_error
  
  class CardRequestHandler(object):
  
      @cherrypy.expose
      def update(self, **jsonText):
          db = getSession()
          result = {"operation" : "update", "result" : "success" }
          try:
              u = json.loads(jsonText)
              c = db.query(card).filter(card.id == u.id)
              c.name = u.name
              c.content = u.content
              rzSession.commit()
          except:
              result["result"] = { "exception" : formatEx() }
          return json.dumps(result)
  </code></pre>
  
  <p>And, here's my jquery call to make the post</p>
  
  <pre><code>
  function Update(el){
      el = jq(el); // makes sure that this is a jquery object
  
      var pc = el.parent().parent();
      pc = ToJSON(pc);
  
      //$.ajaxSetup({ scriptCharset : "utf-8" });
      $.post( "http://localhost/wsgi/raspberry/card/update", pc,
              function(data){
                  alert("Hello Update Response: " + data);
              }, 
              "json");
  }
  
  function ToJSON(h){
      h = jq(h);
      return { 
          "id" : h.attr("id"), 
          "name" : h.get(0).innerText, 
          "content" : h.find(".Content").get(0).innerText
      };
  }
  </code></pre>