'Writes the given chunk to the output buffer.
To write the output to the network, use the flush() method below.
If the given chunk is a dictionary, we write it as JSON and set
the Content-Type of the response to be ``application/json``.
(if you want to send JSON as a different ``Content-Type``, call
set_header *after* calling write()).
Note that lists are not converted to JSON because of a potential
cross-site security vulnerability.  All JSON output should be
wrapped in a dictionary.  More details at
http://haacked.com/archive/2009/06/25/json-hijacking.aspx/ and
https://github.com/facebook/tornado/issues/1009'

def write(self, chunk):

    if self._finished:
        raise RuntimeError('Cannot    write()    after    finish()')
    if (not isinstance(chunk, (bytes, unicode_type, dict))):
        message = 'write()    only    accepts    bytes,    unicode,    and    dict    objects'
        if isinstance(chunk, list):
            message += '.    Lists    not    accepted    for    security    reasons;    see    http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write'
        raise TypeError(message)
    if isinstance(chunk, dict):
        chunk = escape.json_encode(chunk)
        self.set_header('Content-Type', 'application/json;    charset=UTF-8')
    chunk = utf8(chunk)
    self._write_buffer.append(chunk)
