简介
QJson已经在QT5中集成到了QtCore模块中,在使用QJson时不需要额外引入其它模块。
C++常用的Json库:JsonCpp,CJSON,QJson
本文主要介绍QJSON,在将QJson数据写入到文件主要会用到有关QJSON的三个类:
1 QJsonArray:json数组类,类似QVariantList
2 QJsonObject:json对象类,类似QVariantMap
3 QJsonDocument:json文档类,主要将用于转换json与ByteArray格式数据
示例代码-QJsonObject
#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QJsonObject>
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 在home路径创建test.json文件,以读写方式打开
QFile file(QDir::homePath() + "/jsonObject.json");
if( !file.open(QIODevice::ReadWrite) )
{
qDebug() << "file open error!";
return 1;
}
// 使用QJsonObject对象插入键值对。(写入文件中与代码中,不能保证成员顺序一致。实际是保存到了QVariantMap中)
QJsonObject jsonObject;
jsonObject.insert("name","tom");
jsonObject.insert("age",18.5);
jsonObject.insert("time",QDateTime::currentDateTime().toString());
// 创建Json文档对象,将Json对象设置到文档对象中,写入到文件时使用文档的 QJsonDocument::toJson()方法,将Json数据转换为字节数组
QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);
file.write(jsonDoc.toJson());
file.close();
qDebug() << "write to file done.";
return a.exec();
}
jsonObject.json文件内容:
{
"age": 18.5,
"name": "tom",
"time": "Fri Jul 9 10:30:34 2021"
}
示例代码-QJsonArray
#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QJsonObject>
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile fileArray(QDir::homePath() + "/jsonArray.json");
if( !fileArray.open(QIODevice::ReadWrite))
{
qDebug() << "file open error!";
return 1;
}
// 使用JsonArray添加值并写入文件(写入文件中的与代码中的顺序一致,实际是保存到了QVariantList中)
QJsonArray jsonArray;
jsonArray.append("name");
jsonArray.append(18);
jsonArray.append(QDateTime::currentDateTime().toString());
QJsonDocument jsonArrayDoc;
jsonArrayDoc.setArray(jsonArray);
fileArray.write(jsonArrayDoc.toJson());
fileArray.close();
qDebug() << "write jsonArray to file done.";
return a.exec();
}
jsonArray.json文件内容
[
"name",
18,
"Fri Jul 9 10:30:34 2021"
]
示例代码-JsonObject与JsonArray结合使用例子
#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QJsonObject>
#include <QDateTime>
#include <QJsonDocument>
#include <QJsonArray>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile fileExample(QDir::homePath() + "/JsonExample.json");
if( !fileExample.open(QIODevice::ReadWrite))
{
qDebug() << "JsonExample file open error!";
return 1;
}
QJsonArray exampleArray;
int baseAge = 20;
char* names[] = {"tom" , "bob", "lili"};
// 将每个对象放入json数组中
for(int i = 0; i < 3; ++i)
{
QJsonObject exampleObject;
exampleObject.insert("name",names[i]);
exampleObject.insert("age",baseAge + i);
exampleObject.insert("time",QDateTime::currentDateTime().toString());
exampleArray.append(exampleObject);
}
// 向数组中放不同类型的jsonObject
QJsonObject sizeJson;
sizeJson.insert("size",exampleArray.size());
exampleArray.append(sizeJson);
// 将json数组放入json对象中
QJsonObject jsonArrayObject;
jsonArrayObject.insert("index:1",exampleArray);
// 写入到打开的文档fileExample中
QJsonDocument exampleJsonDoc;
exampleJsonDoc.setObject(jsonArrayObject);
fileExample.write(exampleJsonDoc.toJson());
fileExample.close();
qDebug() << "write fileExample to file done.";
return a.exec();
}
JsonExample.json文件内容:
{
"index:1": [
{
"age": 20,
"name": "tom",
"time": "Fri Jul 9 10:30:34 2021"
},
{
"age": 21,
"name": "bob",
"time": "Fri Jul 9 10:30:34 2021"
},
{
"age": 22,
"name": "lili",
"time": "Fri Jul 9 10:30:34 2021"
},
{
"size": 3
}
]
}