我正在尝试学习如何使用 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显示如何通过
加载文档QFile
QFile
转换为QString
QString
转换为QByteArray
QJsonDocument
QByteArray
醇>
有更简单的方法吗?
答案 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)
无需转换为字符串和返回。使用QSettings和QVariant课程,您可以轻松完成此操作。从QVariant
创建QJsonDocument
对象,并将其与QSettings
一起保存。查看函数QJsonDocument::fromVariant和QJsonDocument::toVariant。将它们与QSettings
类和具体void QSettings::setValue ( const QString & key, const QVariant & value )方法结合使用,可以很好地与QVariant
一起使用,就是这样。
同样QSettings
类有这个构造函数QSettings::QSettings ( const QString & fileName, Format format, QObject * parent = 0 )
这将允许您设置文件的路径 - fileName
变量