#python #json #dictionary
#python #json #словарь
Вопрос:
У меня есть вложенный словарь со многими элементами в файле json:
{
"Create Code For Animals": {
"mammals": {
"dog": {
"color": "brown",
"name": "John",
"legs": "four",
"tail": "yes"
},
"cat": {
"color": "blue",
"name": "Johnny",
"legs": "four",
"tail": "yes"
},
"donkey": {
"color": "grey",
"name": "Mickey",
"legs": "four",
"tail": "yes"
}
Я хочу заменить имя в каждом из животных, затем сохранить его обратно в файл И сохранить отступ таким, каким он был (как показано).
Я использую следующие 2 метода для загрузки и выгрузки исходного и обновленного словаря.
Все работает хорошо (для изменения значения и сохранения его обратно в файл), за исключением того, что отступ (формат) строк разрушается после сохранения файла, и файл сохраняется как одна длинная строка (с ‘ n’, показанным после обновленного значения).
Я пытался использовать ‘pickle’ (как показано в одном из сообщений здесь), но это не сработало, создало беспорядок во всех данных в файле.
def loadJson(self, jsonFilename):
with open(FILE_PATH '\' jsonFilename, 'r') as f:
return json.load(f)
def writeJson(self, jsonFilename, jsonDict):
with open(FILE_PATH '\' jsonFilename, 'w') as f:
return json.dump(jsonDict, f)
Подойдет любая помощь.
Ответ №1:
json.dumps и dump имеют параметр с именем indent
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
level of 0 will only insert newlines. ``None`` is the most compact
representation. Since the default item separator is ``', '``, the
output might include trailing whitespace when ``indent`` is specified.
You can use ``separators=(',', ': ')`` to avoid this
Что-то вроде этого будет делать:
json.dump(jsonDict,f,indent=4)
Комментарии:
1. Отлично! работает! есть идеи, как избавиться от ‘ n’ в конце обновленного значения?
2. Извините, не понял комментарий вы имели в виду новые строки в конце файла?
3. точно. новая строка. Он отображается после обновленного значения. Другие значения остаются неизменными (поскольку они не были обновлены)
4. ну, если вы сделаете отступ, вы получите новые строки. Этого нельзя избежать. Если вы получаете чрезмерное количество новых строк, попробуйте использовать разделитель
5. Конечно, все это косметическое, количество пробелов в файле json вообще не имеет значения