Как писать и читать в JSON файл, используя QT - PullRequest
0 голосов
/ 17 марта 2020

Я пишу этот код, и он снова добавляет мой json файл со всеми данными. После этого содержимое моего файла становится двойным.

QFile file("C:/Users/Vizexperts/Documents/QT projects/Json_File_Read_Write/new 1.json");

file.open(QIODevice::ReadWrite|QIODevice::Text);
QString dataString=file.readAll();

QJsonDocument doc= QJsonDocument::fromJson(dataString.toUtf8());
QJsonObject dataobject =doc.object();

qDebug()<<(dataobject)["D"].toString();

QJsonValue valueA=dataobject.value(QString("A"));
QJsonObject valueAobject=valueA.toObject();

QJsonValue valueA1=valueAobject["A1"];
qDebug()<<valueA1.toString();
ui->label->setText(valueA1.toString());

dataobject["D"]="a";
  doc.setObject(dataobject);
  file.write(doc.toJson());
  file.close();

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Нет простого способа отредактировать одно значение в файле JSON и затем записать его обратно.

Самый простой (с точки зрения подверженности ошибкам) ​​способ -

  1. Открыть файл
  2. Загрузить текст в JSON объект
  3. Редактировать данные
  4. Записать JSON объект обратно в файл

Когда Вы открываете файл для записи и хотите перезаписать в нем существующие данные, вам также необходимо использовать флаг QIODevice::Truncate. Это обрезает текст внутри вашего JSON файла, и все, что вы пишете в этот файл, стирает предыдущее содержимое.

Если вы хотите, вы можете открыть файл дважды (и закрыть его соответственно) - один раз, когда вы читаете из это (так что нет доступа к записи) и один раз, когда вы пишете в него. Таким образом, вы можете обработать указанные операции c ошибки, которые могут возникнуть. Если вы не хотите беспокоиться об обработке ошибок, просто добавьте дополнительный флаг, и вы хорошо наберете go.

0 голосов
/ 17 марта 2020

Похоже, вы переписываете JSONdo c в файл.

file.write(doc.toJson());

Насколько я знаю, нет способа просто обновить файл с изменениями, которые вы сделали в коде. Самый простой способ - очистить файл и снова переписать весь объект.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...