当前位置: 首页 > 工具软件 > Qjson > 使用案例 >

QJson详细介绍

刘永望
2023-12-01

QJson

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
QJson相关类主要包括以下5种

QJsonDoucment

可以封装完整的Json文档类,其中可以插入QJsonArray, QJsonObject,可以将UTF-8编码的字符串(或Variant)转换为JSON( fromJson() ),也可以将JSON文本转换为字符串( toJson() )(或Variant)

使用fromJson将QString转QJsonDocument

QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = nullptr)

将一个UTF-8编码的字符串转成QJsonDocument文本,QString转QJsonDocument代码如下

    QJsonDocument Json;
    QString s = "{\"111\":\"222\" , \"333\":\"444\"}";
    Json = QJsonDocument::fromJson(s.toStdString().c_str());
    qDebug() << Json << " " << s;
    //输出
    //QJsonDocument({"111":"222","333":"444"})   "{\"111\":\"222\" , \"333\":\"444\"}"

存储QJsonArray文本 setArray

void QJsonDocument::setArray(const QJsonArray &array)

案例如下

    QJsonDocument Json;
    QJsonArray array = {123, 3.3, true, "I Love ShenHe"};
    array.append("ShenHe is my wife");
    Json.setArray(array);
    qDebug() << Json;
    //输出
    //QJsonDocument([123,3.3,true,"I Love ShenHe","ShenHe is my wife"])

存储QJsonObject文本函数 setObject

void QJsonDocument::setObject(const QJsonObject &object)

案例如下

    QJsonDocument Json;
    QJsonObject object;
    object["ShenHe"] = "My wife";
    object["Key1"] = 520;
    object["Key2"] = QJsonArray({5, 2, 0});
    Json.setObject(object);
    qDebug() << Json;
    //输出
    //QJsonDocument({"Key1":520,"Key2":[5,2,0],"ShenHe":"My wife"})

分别将QJsonObject与QJsonArray转换为QByteArray

先将QJsonObject和QJsonArray转成QJsonDocument,再转换成QBytArray
函数原型为

QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format = Indented) const

format表示转换的格式为缩进型还是紧凑型。

QByteArray byteArray1 = QJsonDocument(object).toJson();
QByteArray byteArray2 = QJsonDocument(array).toJson();

QJsonArray

JSON数组是一个值列表。可以通过数组的方式进行直接构造,也可以插入和删除QJsonValue来操作该列表。其可以看作一个数组,其中存QJsonValue类型的值

QJsonArray赋值

    QJsonArray array = {1, 2, true, 3.14159265, "I Love ShenHe"};
    array.append("ShenHe is My wife");
    array.insert(1, "ShenHe");

遍历QJsonArray

QJsonValue QJsonArray::at(qsizetype i) const //索引
qsizetype QJsonArray::count() const	//QJsonArray的数量
for(int i = 0; i < array.count(); ++ i)
    qDebug() << array.at(i);

与QVariantList互相转换

QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
QVariantList QJsonArray::toVariantList() const

QJsonObject

JSON对象是键值对的列表,其中键是唯一的字符串,值由QJsonValue表。QJsonObject可以转换为QVariantMap,也可以从QVariantMap转换。

QJsonObject的构造

QJsonObject obj
{
    {"key", 1},
    {"Bool", true},
    {"ShenHe", "My wife"},
    {"array", QJsonArray({1, 2, 3})}
};

类似于QVariantMap操作:

QJsonObject obj;
obj["key"] = 1;
obj["Bool"] = true;
obj.insert("ShenHe", "My wife");
obj["array"] = QJsonArray({1, 2, 3}); 

value(key)

可以通过类似于QVariantMap的方式获取value,也可以通过value函数获取

qDebug() << obj["array"];
qDebug() << obj.value("array");

与QVariantMap互相转换

QJsonObject fromVariantMap(const QVariantMap &map)
QVariantMap QJsonObject::toVariantMap() const

QJsonValue

主要用于封装JSON值,类似于QVariant,支持以下六种类型

类型QJsonValue类型
boolQJsonValue::Bool
doubleQJsonValue::Double
stringQJsonValue::String
arrayQJsonValue::Array
objectQJsonValue::Object
nullQJsonValue::Null

与QVariant互转

QJsonValue fromVariant(const QVariant &variant)
QVariant QJsonValue::toVariant() const

与QJsonObject,QJsonArray互转

QJsonValue::QJsonValue(const QJsonArray &a)
QJsonObject QJsonValue::toObject() const
QJsonValue::QJsonValue(const QJsonObject &o)
QJsonArray QJsonValue::toArray() const

与其他类型的转换

bool QJsonValue::toBool() const
double QJsonValue::toDouble() const
int QJsonValue::toInt() const
QString QJsonValue::toString() const

QJsonParseError

JSON处理过程中的错误类型

QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson("{\"note\":\"二哥有点帅\"}", &jsonError);
qDebug()<<jsonError.errorString();

参考文章

 类似资料: