escapes[i] = u"\\u%04x" % i
def __dump_string(stream, s):
- stream.write(u"\"")
- for c in s:
- x = ord(c)
- escape = escapes.get(x)
- if escape:
- stream.write(escape)
- else:
- stream.write(c)
- stream.write(u"\"")
+ stream.write(u'"%s"' % ''.join(escapes.get(ord(c), c) for c in s))
def to_stream(obj, stream, pretty=False, sort_keys=True):
if obj is None:
items = sorted(obj.items())
else:
items = obj.iteritems()
- i = 0
- for key, value in items:
+ for i, (key, value) in enumerate(items):
if i > 0:
stream.write(u",")
- i += 1
__dump_string(stream, unicode(key))
stream.write(u":")
to_stream(value, stream, pretty, sort_keys)
stream.write(u"}")
elif type(obj) in (list, tuple):
stream.write(u"[")
- i = 0
- for value in obj:
+ for i, value in enumerate(obj):
if i > 0:
stream.write(u",")
- i += 1
to_stream(value, stream, pretty, sort_keys)
stream.write(u"]")
else:
- raise Error("can't serialize %s as JSON" % obj)
+ raise Exception("can't serialize %s as JSON" % obj)
def to_file(obj, name, pretty=False, sort_keys=True):
stream = open(name, "w")
try:
s = unicode(s, 'utf-8')
except UnicodeDecodeError, e:
- seq = ' '.join(["0x%2x" % ord(c) for c in e.object[e.start:e.end]])
+ seq = ' '.join(["0x%2x" % ord(c)
+ for c in e.object[e.start:e.end] if ord(c) >= 0x80])
return ("not a valid UTF-8 string: invalid UTF-8 sequence %s" % seq)
p = Parser(check_trailer=True)
p.feed(s)