Как сохранить перенос строк при .json форматировании
У меня задача привести файл в удобочитаемый вид.(Пример структуры файла:
{ "strings":[
{
"Key": "abc",
"Value": "text"},
{"Key": "def", "Value": "text2"
}]
}
Чат-бот подсказал мне перевести данные .json, что позволит выровнять табуляцию и переносы строк. Так то да, но скрипт все время сохраняет в файл все данные в одну строку - все переносы теряются. Мне удалось через костыль добиться нужного результата - сначала записываю в один файл
(f.write('\n'.join(tabbed_lines) + '\n'))
тут же читаю из него и переписываю в другой файл
(json.dump(data, f, indent='\t', ensure_ascii=False) f.write('\n'))
Как обойтись без этих костылей?
Решение найдено! Всем большое спасибо за ответы!
Ответы (2 шт):
Вот рабочий код для сохранения в удобочитаемом виде без костылей с помощью модуля json:
import json
data = {
"1_param": 1,
"2_param": 2,
"dict": {
"dict_param_1": 1,
"dict_param_2": 2,
}
}
with open("my_test.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
indent - параметр, отвечающий за размер табуляции. По умолчанию он равен None, что соответствует наиболее компактному представлению без перевода строк и отступов. Вы можете изменить его на неотрицательное число, что вынудит json выводить элементы массивов и словарей отдельными строками с заданным отступом.
Результат:
Каким-то невероятным чудом (учитывая что я почти совсем не знаю языков программирования) мне удалось добиться нужного мне результата! Вместо записи в файл из переменной, а потом чтения из файла, я понял что логичнее передавать переменную дальше для обработки и что можно просто добавить переносы строк в переменную:
tabbed_lines = [line + '\n' for line in tabbed_lines]
И все заработало как надо, и итоговый результат записывается в файл с правильными переносами и табуляцией. Всем большое спасибо за ответы!
