Qt中使用Json需要一下几个类:
QJsonValue 代表了json格式中的一个值
QJsonObject 代表了json格式的一个对象
QJsonArray 代表了json格式中的数组
QJsonDocument 用来读写json文件
QJsonParseError 用来表示json分析过程的错误
其中QJsonValue支持6中基本的数据类型:
- bool QJsonValue::Bool
- double QJsonValue::Double
- string QJsonValue::String
- array QJsonValue::Array
- object QJsonValue::Object
- null QJsonValue::Null
下面例子表示了json的创建、读取、序列化和反序列化的过程。
其中使用QJsonDocument 可以用来序列化和反序列化的过程,进而实现文件读写、socket的读写。
序列化json的函数:
QByteArray toBinaryData()
QByteArray toJson(JsonFormat format = Indented)
反序列化:
QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate)
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)
QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate)
QJsonDocument fromVariant(const QVariant &variant)
#include <QCoreApplication>
#include <QDebug>
#include <QJsonObject>
#include <QFile>
#include <QJsonDocument>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); QJsonObject obj;
obj.insert("name", "lily");
obj.insert("age", 23);
QJsonObject addr;
addr.insert("city", "guangzhou");
addr.insert("province", "guangdong");
obj.insert("addr", addr);
qDebug() << obj<<endl; qDebug()<<obj.value("name").toString()<<endl; //序列化
QJsonDocument jsonDoc(obj);
QByteArray ba = jsonDoc.toJson(); //反序列化
QJsonParseError e;
QJsonDocument jsonDocNew = QJsonDocument::fromJson(ba, &e); if(e.error == QJsonParseError::NoError && !jsonDocNew.isNull())
{
QJsonObject getObj = jsonDocNew.object();
qDebug() << getObj<<endl;
} return a.exec();
}