Есть ли способ получить отступ в файле JSON? Как мне извлечь из JSON-файла j
его отступ (4)?
import json
j = json.dumps({'x': 1, 'y': 2}, sort_keys=True, indent=4, separators=(',', ': '))
Моя цель - сравнить два файла JSON, но если отступы двух файлов различаются, на выходе будет заметно, что некоторые строки с одинаковым содержимым, но с разным количеством пробелов отличаются.
Если файл JSON содержит только {}
, какой отступ вы ожидаете?
Справедливый пункт @Wombatz, я бы сказал 0, но я не думаю, что это правильно ...
Зачем сравнивать представление данных, если можно сравнить сами проанализированные данные (который вообще не включает отступы любой)?
Вероятно, это то, что мне нужно сделать и чего я до сих пор пытался избежать @CharlesDuffy :)
Вы можете найти первую строку, которая начинается с символа пробела, и подсчитать количество пробелов до первого непробельного символа (это легко сделать с помощью регулярных выражений). Но зачем тебе это знать?
нет никакой гарантии, что будут какие-либо пробелы или что отступ будет согласованным.
он наверняка потенциально хрупкий (и я также задаюсь вопросом, зачем им вообще нужна эта информация, поэтому я спрашиваю), но при указании indent=<positive integer>
действительно есть гарантия.
может я неправильно понял вопрос. Вы правы, если они хотят получить отступ для файла, который они создали
Я отредактировал вопрос с указанием причины, по которой мне нужен отступ
поскольку вы добавили, что ваша цель - сравнить два разных файла json, мне кажется, что гораздо более надежный подход - сравнить их представление данных, то есть json.load(file_1) == json.load(file_2)
Для меня этого недостаточно ... Я использую этот класс docs.python.org/2/library/difflib.html, чтобы построчно определить разницу в двух файлах.
ваши данные глубоко вложены? Если нет, я бы предложил использовать структуру данных set
, чтобы выяснить различия. Difflib тоже не всегда будет достаточно надежным.
К сожалению, мои данные действительно вложены (как минимум 4 уровня); Я, наверное, дважды проверю файл с вашим первым ответом (рег. Выражение) :)
Учитывая произвольные данные JSON, нет оснований полагать, что отступы единообразны без сканирования все пробелов.