Helpers
json_minify(string, strip_space=True)
Took from: https://github.com/getify/JSON.minify/tree/python Library under MIT license.
I think install library to just minify json is stupid, so I copied function, sorry.
Source code in aminofixfix/lib/helpers.py
def json_minify(string, strip_space=True) -> str:
"""
Took from: https://github.com/getify/JSON.minify/tree/python
Library under MIT license.
I think install library to just minify json is stupid,
so I copied function, sorry.
"""
tokenizer = re.compile(r'"|(/\*)|(\*/)|(//)|\n|\r')
end_slashes_re = re.compile(r"(\\)*$")
in_string = False
in_multi = False
in_single = False
new_str = []
index = 0
for match in re.finditer(tokenizer, string):
if not (in_multi or in_single):
tmp = string[index : match.start()]
if not in_string and strip_space:
# replace white space as defined in standard
tmp = re.sub("[ \t\n\r]+", "", tmp)
new_str.append(tmp)
elif not strip_space:
# Replace comments with white space so that the JSON parser reports
# the correct column numbers on parsing errors.
new_str.append(" " * (match.start() - index))
last_index = index
index = match.end()
val = match.group()
if val == '"' and not (in_multi or in_single):
escaped = end_slashes_re.search(string, last_index, match.start())
# start of string or unescaped quote character to end string
if not in_string or (escaped is None or len(escaped.group()) % 2 == 0): # noqa
in_string = not in_string
index -= 1 # include " character in next catch
elif not (in_string or in_multi or in_single):
if val == "/*":
in_multi = True
elif val == "//":
in_single = True
elif val == "*/" and in_multi and not (in_string or in_single):
in_multi = False
if not strip_space:
new_str.append(" " * len(val))
elif val in "\r\n" and not (in_multi or in_string) and in_single:
in_single = False
elif not ((in_multi or in_single) or (val in " \r\n\t" and strip_space)): # noqa
new_str.append(val)
if not strip_space:
if val in "\r\n":
new_str.append(val)
elif in_multi or in_single:
new_str.append(" " * len(val))
new_str.append(string[index:])
return "".join(new_str)