Как записать элементы во вложенные дочерние элементы файла JSON с помощью Python

#python #json

#python #json

Вопрос:

У меня есть такой файл JSON.

 {

    "posts": [{
        "id": 0,
        "title": "title1",
        "author": "CIQ",
        "views": 100,
        "reviews": 31
    }],
    "authors": [{
        "id": 0,
        "first_name": "Commerce",
        "last_name": "IQ",
        "posts": 45
    }]
}
  

Я хочу записать значения во вложенных дочерних элементах JSON, например. Добавьте следующий пост и сохраните тот же файл JSON.

    {
        "id": 1,
        "title": "title2",
        "author": "CIQ2",
        "views": 100,
        "reviews": 31
    }
  

Конечный файл будет выглядеть следующим образом.

 {
"posts": [{
    "id": 0,
    "title": "title1",
    "author": "CIQ",
    "views": 100,
    "reviews": 31
}, {
    "id": 1,
    "title": "title2",
    "author": "CIQ2",
    "views": 100,
    "reviews": 3
}],
"authors": [{
    "id": 0,
    "first_name": "Commerce",
    "last_name": "IQ",
    "posts": 45
}]
  

}

Я использую приведенный ниже скрипт для записи файла.

 with open(file_path, 'r ') as json_file:
            data = json.load(json_file)
            data['posts'].append(new_post)
            json_file.write(json.dumps(data, ensure_ascii=True))
  

проблема с этим скриптом заключается в том, что он добавляет данные после конца файла. как показано на рисунке.
введите описание изображения здесь

Пожалуйста, предложите какой-нибудь подход.

Ответ №1:

проблема с этим скриптом заключается в том, что он добавляет данные после конца файла.

Да, это то, что r означает mode. Пожалуйста, ознакомьтесь с документацией.

Пожалуйста, предложите какой-нибудь подход

Прочитайте файл с помощью mode r , внесите изменения, а затем перезапишите файл с помощью mode w (в отдельном with блоке).

Ответ №2:

мы можем сделать это, прочитав и записав его отдельно.

 with open(file_path, 'r') as data_file:
    data = json.load(data_file)

data['posts'].append(new_post)

with open(file_path, 'w') as data_file:
    data = json.dump(data, data_file)