Skip to content

Commit

Permalink
dump strings directly, removing remaining dependency on json module
Browse files Browse the repository at this point in the history
  • Loading branch information
dpranke committed Mar 31, 2019
1 parent 7d914c1 commit 10e4e82
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 10 deletions.
42 changes: 33 additions & 9 deletions json5/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

import math
import re
import json
import sys
import unicodedata

Expand Down Expand Up @@ -244,14 +243,39 @@ def _dumpkey(k, ensure_ascii):


def _dump_str(obj, ensure_ascii):
return json.dumps(obj, ensure_ascii)
single = "'" in obj
double = '"' in obj
if single and double:
return json.dumps(obj, ensure_ascii=ensure_ascii)
elif double:
return "'" + obj + "'"
return '"' + obj + '"'
ret = ['"']
for ch in obj:
if ch == '\\':
ret.append('\\\\')
elif ch == '"':
ret.append('\\"')
elif ch == u'\u2028':
ret.append('\\u2028')
elif ch == u'\u2029':
ret.append('\\u2029')
elif ch == '\n':
ret.append('\\n')
elif ch == '\r':
ret.append('\\r')
elif ch == '\b':
ret.append('\\b')
elif ch == '\f':
ret.append('\\f')
elif ch == '\t':
ret.append('\\t')
elif ch == '\v':
ret.append('\\v')
elif ch == '\0':
ret.append('\\0')
elif not ensure_ascii:
ret.append(ch)
elif ord(ch) < 128:
ret.append(ch)
elif ord(ch) < 65536:
ret.append('\u' + '%04x' % ord(ch))
else:
ret.append('\U' + '%08x' % ord(ch))
return u''.join(ret) + '"'


def _is_ident(k):
Expand Down
2 changes: 1 addition & 1 deletion json5/tests/json5_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ def _custom_serializer(obj):
def test_ensure_ascii(self):
self.check(u'\u00fc', '"\\u00fc"')
self.assertEquals(json5.dumps(u'\u00fc', ensure_ascii=False),
'"\u00fc"')
u'"\u00fc"')

def test_numbers(self):
self.check(15, '15')
Expand Down

0 comments on commit 10e4e82

Please sign in to comment.