首页 > 解决方案 > 如何使用 QT 读写 JSON 文件

问题描述

我编写了这段代码,它再次将所有数据附加到我的 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();

标签: jsonqtqt5

解决方案


没有简单的方法可以编辑 JSON 文件中的单个值,然后将其写回。

最简单的(就容易出错而言)方法是

  1. 打开文件
  2. 将文本加载到 JSON 对象中
  3. 编辑数据
  4. 将 JSON 对象写回文件

当您打开一个文件进行写入并想要覆盖其中的现有数据时,您还需要使用该QIODevice::Truncate标志。这会截断 JSON 文件中的文本,并且您写入该文件的任何内容都会删除之前的内容。

如果需要,您可以打开文件两次(并相应地关闭它) - 一次读取文件时(因此没有写入权限),一次写入文件时。这样您就可以处理给定操作可能发生的特定错误。如果您不想为错误处理而烦恼,只需添加额外的标志就可以了。


推荐阅读