繁体   English   中英

如何将QJsonDocument保存并加载到文件中?

[英]How to save and load a QJsonDocument to a file?

我正在尝试学习如何使用JSONQt JSON类 例如,我想创建一个简单的QJsonDocument ,将其保存到文件中,将其加载到不同的QJsonDocument并比较结果。

我设法创建了一个QJsonDocument 但是, QJsonDocument 接口中没有简单的命令将其保存到文件中。 从文件加载文档也是如此。

#include <QJsonObject>
#include <QJsonDocument>
#include <QVariant>

int main()
{
    QVariantMap map;
    map.insert("integer", 1);
    map.insert("double", 2.34);
    map.insert("bool", QVariant(true));
    map.insert("string", "word");
    QJsonObject object = QJsonObject::fromVariantMap(map);

    QJsonDocument document;
    document.setObject(object);

    // ?? save document to file
    // ?? load file to document

    return 0;
}

这个答案显示了如何加载文档

  1. 读到QFile
  2. QFile转换为QString
  3. QString转换为QByteArray
  4. QByteArray构造QJsonDocument

有没有更简单的方法来做到这一点?

就个人而言,我认为[你链接到的]代码看起来有点混乱。 警告:头编译代码如下。

QJsonDocument loadJson(QString fileName) {
    QFile jsonFile(fileName);
    jsonFile.open(QFile::ReadOnly);
    return QJsonDocument().fromJson(jsonFile.readAll());
}

void saveJson(QJsonDocument document, QString fileName) {
    QFile jsonFile(fileName);
    jsonFile.open(QFile::WriteOnly);
    jsonFile.write(document.toJson());
}

这可能不完美:它假设QFile而不是QIODevice ,但如果你只处理本地文件,也许没关系。 然后,您可以使用这些函数,而不是每次需要加载/保存Json时重复Json加载/保存代码。

无需转换为字符串和返回。 使用QSettingsQVariant类,您可以轻松完成。 QJsonDocument创建QVariant对象并使用QSettings保存它。 查看函数QJsonDocument :: fromVariantQJsonDocument :: toVariant 将它们与QSettings类结合使用,特别是使QSettings :: setValue(const QString&key,const QVariant&value)方法无效 ,这与QVariant ,就是这样。

另外QSettings类有这个构造函数QSettings :: QSettings(const QString&fileName,Format format,QObject * parent = 0) ,它允许你设置文件的路径 - fileName变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM