# the javscript. Some json libraries do this escaping by default,
# although python's standard library does not, so we do it here.
# http://stackoverflow.com/questions/1580647/json-why-are-forward-slashes-escaped
- return _json_encode(value).replace("</", "<\\/")
+ return _json_encode(recursive_unicode(value)).replace("</", "<\\/")
def json_decode(value):
import tornado.escape
import unittest
-from tornado.escape import utf8, xhtml_escape, xhtml_unescape, url_escape, url_unescape, to_unicode, json_decode
+from tornado.escape import utf8, xhtml_escape, xhtml_unescape, url_escape, url_unescape, to_unicode, json_decode, json_encode
from tornado.util import b
linkify_tests = [
# Non-ascii bytes are interpreted as utf8
self.assertEqual(json_decode(utf8(u'"\u00e9"')), u"\u00e9")
+
+ def test_json_encode(self):
+ # json deals with strings, not bytes, but our encoding function should
+ # accept bytes as well as long as they are utf8.
+ self.assertEqual(json_decode(json_encode(u"\u00e9")), u"\u00e9")
+ self.assertEqual(json_decode(json_encode(utf8(u"\u00e9"))), u"\u00e9")
+ self.assertRaises(UnicodeDecodeError, json_encode, b("\xe9"))