154 if obj is None or obj is False or obj is True: |
154 if obj is None or obj is False or obj is True: |
155 return {None: 'null', False: 'false', True: 'true'}[obj] |
155 return {None: 'null', False: 'false', True: 'true'}[obj] |
156 elif isinstance(obj, int) or isinstance(obj, float): |
156 elif isinstance(obj, int) or isinstance(obj, float): |
157 return str(obj) |
157 return str(obj) |
158 elif isinstance(obj, str): |
158 elif isinstance(obj, str): |
159 return '"%s"' % jsonescape(obj) |
159 u = unicode(obj, encoding.encoding, 'replace') |
|
160 return '"%s"' % jsonescape(u).encode('utf-8') |
160 elif isinstance(obj, unicode): |
161 elif isinstance(obj, unicode): |
161 return json(obj.encode('utf-8')) |
162 return '"%s"' % jsonescape(obj).encode('utf-8') |
162 elif hasattr(obj, 'keys'): |
163 elif hasattr(obj, 'keys'): |
163 out = [] |
164 out = [] |
164 for k, v in obj.iteritems(): |
165 for k, v in obj.iteritems(): |
165 s = '%s: %s' % (json(k), json(v)) |
166 s = '%s: %s' % (json(k), json(v)) |
166 out.append(s) |
167 out.append(s) |