如何使用QT写入和读取JSON文件

如何使用QT写入和读取JSON文件,json,qt,qt5,Json,Qt,Qt5,我编写了这段代码,它再次将所有数据附加到我的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= QJsonDocu

我编写了这段代码,它再次将所有数据附加到我的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();
QFile文件(“C:/Users/Vizexperts/Documents/QT projects/Json_file_Read_Write/new 1.Json”);
打开(QIODevice::ReadWrite | QIODevice::Text);
QString dataString=file.readAll();
QJsonDocument doc=QJsonDocument::fromJson(dataString.toUtf8());
QJsonObject dataobject=doc.object();

qDebug()似乎您正在将JSONdoc重写为文件

file.write(doc.toJson());
据我所知,没有办法仅仅用您在代码中所做的更改来更新文件。简单的方法是清除文件并重新重写整个对象


更大的挑战是再次解析文件,比较JSON对象,找到需要写入更改和更新文件的光标位置。根据JSON对象的大小,这似乎是过度设计的

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

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

  • 打开文件
  • 将文本加载到JSON对象中
  • 编辑数据
  • 将JSON对象写回文件
  • 当您打开一个文件进行写入并希望覆盖其中的现有数据时,还需要使用
    QIODevice::Truncate
    标志。这会截断JSON文件中的文本,无论您向该文件写入什么内容,都会擦除以前的内容

    如果需要,可以打开文件两次(并相应地将其关闭)——一次是在读取文件时打开(因此没有写入权限),一次是在写入文件时打开。通过这种方式,您可以处理可能发生的给定操作的特定错误。如果错误处理不是你想麻烦自己的事情,只需添加额外的标志,你就可以开始了