1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| def json_encode(data): '''JSON 编码 >>> json_encode(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar":["baz", null, 1.0, 2]}]' ''' if isinstance(data, bool): return "false" if not data else "true" elif isinstance(data, type(None)): return "null" elif isinstance(data, (int, float)): return str(data) elif isinstance(data, str): return '"' + escape_string(data) + '"' elif isinstance(data, (list, tuple)): return "[" + ", ".join(json_encode(d) for d in data) + "]" elif isinstance(data, dict): return '{' + ', '.join(json_encode(k) + ':' + json_encode(v) for k, v in data.items()) + '}' else: raise TypeError('%s is not JSON serializable, is %s' % (repr(data), type(data)))
def escape_string(s): """Escapes double-quote, tab and new line characters in a string.""" s = s.replace('"', '\\"') s = s.replace("\t", "\\t") s = s.replace("\n", "\\n") return s
|