JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
QJson相关类主要包括以下5种
可以封装完整的Json文档类,其中可以插入QJsonArray, QJsonObject,可以将UTF-8编码的字符串(或Variant)转换为JSON( fromJson() ),也可以将JSON文本转换为字符串( toJson() )(或Variant)
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\"}"
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"])
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转成QJsonDocument,再转换成QBytArray
函数原型为
QByteArray QJsonDocument::toJson(QJsonDocument::JsonFormat format = Indented) const
format表示转换的格式为缩进型还是紧凑型。
QByteArray byteArray1 = QJsonDocument(object).toJson();
QByteArray byteArray2 = QJsonDocument(array).toJson();
JSON数组是一个值列表。可以通过数组的方式进行直接构造,也可以插入和删除QJsonValue来操作该列表。其可以看作一个数组,其中存QJsonValue类型的值
QJsonArray array = {1, 2, true, 3.14159265, "I Love ShenHe"};
array.append("ShenHe is My wife");
array.insert(1, "ShenHe");
QJsonValue QJsonArray::at(qsizetype i) const //索引
qsizetype QJsonArray::count() const //QJsonArray的数量
for(int i = 0; i < array.count(); ++ i)
qDebug() << array.at(i);
QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
QVariantList QJsonArray::toVariantList() const
JSON对象是键值对的列表,其中键是唯一的字符串,值由QJsonValue表。QJsonObject可以转换为QVariantMap,也可以从QVariantMap转换。
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});
可以通过类似于QVariantMap的方式获取value,也可以通过value函数获取
qDebug() << obj["array"];
qDebug() << obj.value("array");
QJsonObject fromVariantMap(const QVariantMap &map)
QVariantMap QJsonObject::toVariantMap() const
主要用于封装JSON值,类似于QVariant,支持以下六种类型
类型 | QJsonValue类型 |
---|---|
bool | QJsonValue::Bool |
double | QJsonValue::Double |
string | QJsonValue::String |
array | QJsonValue::Array |
object | QJsonValue::Object |
null | QJsonValue::Null |
QJsonValue fromVariant(const QVariant &variant)
QVariant QJsonValue::toVariant() const
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
JSON处理过程中的错误类型
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson("{\"note\":\"二哥有点帅\"}", &jsonError);
qDebug()<<jsonError.errorString();
参考文章