Как сохранить перенос строк при .json форматировании

Рейтинг: 0Ответов: 2Опубликовано: 03.08.2025

У меня задача привести файл в удобочитаемый вид.(Пример структуры файла:

{ "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'))

Как обойтись без этих костылей?

Решение найдено! Всем большое спасибо за ответы!

Ответы

▲ 0Принят

Каким-то невероятным чудом (учитывая что я почти совсем не знаю языков программирования) мне удалось добиться нужного мне результата! Вместо записи в файл из переменной, а потом чтения из файла, я понял что логичнее передавать переменную дальше для обработки и что можно просто добавить переносы строк в переменную:

tabbed_lines = [line + '\n' for line in tabbed_lines]

И все заработало как надо, и итоговый результат записывается в файл с правильными переносами и табуляцией. Всем большое спасибо за ответы!

▲ 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 выводить элементы массивов и словарей отдельными строками с заданным отступом.

Результат:

json_file