Хорошо, так что из-за отсутствия лучшей опции, и потому, что я не хотел функцию, которая выдает исключения, я сделал следующее:
def change_type(file):
def to_num(match):
return ast.literal_eval(match.group())
data = open(file).read()[1:-1]
p = re.compile(r'\"([-+]?\d*\.\d+|\d+)\"')
data_json = loads(p.sub(to_num, data))
return data_json
это находит все числа с плавающей запятой и целые числа средивсе возможные строковые значения в json и преобразует только эти строки, оставляя все остальное как есть. Если у кого-нибудь есть предложения получше, дайте мне знать.
Принимает test.json
, то есть [{"x": "123.45", "stuff": "things"}]
и возвращает {'x': 123.45, 'stuff': 'things'}
.