json - 如何使用 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();
解决方案
没有简单的方法可以编辑 JSON 文件中的单个值,然后将其写回。
最简单的(就容易出错而言)方法是
- 打开文件
- 将文本加载到 JSON 对象中
- 编辑数据
- 将 JSON 对象写回文件
当您打开一个文件进行写入并想要覆盖其中的现有数据时,您还需要使用该QIODevice::Truncate
标志。这会截断 JSON 文件中的文本,并且您写入该文件的任何内容都会删除之前的内容。
如果需要,您可以打开文件两次(并相应地关闭它) - 一次读取文件时(因此没有写入权限),一次写入文件时。这样您就可以处理给定操作可能发生的特定错误。如果您不想为错误处理而烦恼,只需添加额外的标志就可以了。
推荐阅读
- javascript - 我们如何解决 selenium 中的错误“未知命令:在 W3C 模式下无法调用非 W3C 标准命令”
- javascript - 将负数更改为正数不起作用
- python-3.x - 为什么 lambda, list comprehensing 会这样?
- angular - 指令内的超时函数未调用
- mysql - 如何从不同 AWS 区域的数据库表(AWS RDS Mysql)中读取数据并根据结果更新其中一个区域的数据库?
- dataweave - 使用 DataWeave 组合两个有效负载
- c# - 按 Key 的第二个元素排序字典
- c++ - 打印/记录 c++ stings 函数调用的缩进 wrt 深度
- javascript - 如何在网络应用程序中打开具有多个站点的谷歌地图?
- openapi - 在 OpenAPI 3.0 中,我应该为具有指定格式的字符串指定 maxLength 吗?