#!/usr/bin/python import re def fix_floats(json, decimals=2, quote='"'): pattern = r'^((?:(?:"(?:\\.|[^\\"])*?")|[^"])*?)(-?\d+\.\d{'+str(decimals)+'}\d+)' pattern = re.sub('"', quote, pattern) fmt = "%%.%df" % decimals n = 1 while n: json, n = re.subn(pattern, lambda m: m.group(1)+(fmt % float(m.group(2))), json) return json json = '[23.670000000000002, "\\"\\\\", 23.969999999999999, "23.870000000000001"]' print(json) print(fix_floats(json)) pyon = repr([23.67, "\"\'\\", "23.969999999999999", 23.87]) print(pyon) print(fix_floats(pyon, decimals=3, quote="'"))