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

时间:2014-01-21 13:51:33

标签: c++ json qt qt5

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

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

#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;
}

This answer显示如何通过

加载文档
  1. 阅读QFile
  2. QFile转换为QString
  3. QString转换为QByteArray
  4. QJsonDocument
  5. 构建QByteArray

    有更简单的方法吗?

2 个答案:

答案 0 :(得分:35)

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

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加载/保存代码。

答案 1 :(得分:1)

无需转换为字符串和返回。使用QSettingsQVariant课程,您可以轻松完成此操作。从QVariant创建QJsonDocument对象,并将其与QSettings一起保存。查看函数QJsonDocument::fromVariantQJsonDocument::toVariant。将它们与QSettings类和具体void QSettings::setValue ( const QString & key, const QVariant & value )方法结合使用,可以很好地与QVariant一起使用,就是这样。

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