JSON解析
Qt中内置了一个QJsonDocument类用来处理json文件,以及json字符串。解析思路先将string加载到QJsonDocument中,然后将其逐层解析。json的格式包含两种,1)对象,2)数组
名字 | 解析 |
---|---|
QJsonDocument | 一个封装完整JSON文档的类,可以从UTF-8编码的基于文本的表示以及Qt自己的二进制格式读取和写入该文档 |
QJsonObject | 是键值对的列表,其中键是唯一的字符串,值由QJsonValue表示。 |
QJsonArray | JSON数组是一个值列表。可以通过从数组中插入和删除QJsonValue来操作该列表。 |
QJsonValue | JSON是一种存储结构化数据的格式。它有6种基本数据类型:bool、double、string、array、object、null |
QJsonParseError | 用于在JSON解析期间报告错误 |
对象解析
测试数据
{"Name":"小明","age":18}
Qt json解析对象 代码
void MainWindow::parseObject()
{
QString str = "{\"Name\":\"小明\",\"Age\":18}";
QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
QJsonObject jobject = jdoc.object();
QJsonValue jvalue_name = jobject.value("Name");
qInfo() << jvalue_name.toString();
QJsonValue jvalue_age = jobject.value("Age");
qInfo() << jvalue_age.toInt();
///////// 遍历 /////////////
foreach (auto item, jobject.keys()) {
qInfo() << "key:" << item;
QJsonValue jvalue = jobject.value(item);
qInfo() << "value:" << jvalue.toVariant();
}
}
运行结果
"小明"
18
key: "Age"
value: QVariant(double, 18)
key: "Name"
value: QVariant(QString, "小明")
数组解析
测试数据
["apple","orange","banana","watermelon"]
Qt json解析数组代码
void MainWindow::parseArray()
{
QString str = "[\"apple\",\"orange\",\"banana\",\"watermelon\"]";
QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
QJsonArray jArray = jdoc.array();
// item 为QJsonValue类型
foreach (auto item, jArray) {
qInfo() << item.toString();
}
}
运行结果
"apple"
"orange"
"banana"
"watermelon"
数组对象混合解析
测试数据
{"Lists":["apple","orange"]}
Qt json解析代码
void MainWindow::parseObjectArray()
{
QString str = "{\"Lists\":[\"apple\",\"orange\"]}";
QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
QJsonObject jObject = jdoc.object();
QJsonValue jLists = jObject.value("Lists");
QJsonArray jArray = jLists.toArray();
// item 为QJsonValue类型
foreach (auto item, jArray) {
qInfo() << "value:" << item.toString();
}
}
运行结果
value: "apple"
value: "orange"
对象数组混合解析
测试数据
[{"Name":"小明","age":18},{"Name":"小王","age":20}]
Qt 解析json代码
void MainWindow::parseArrayObject()
{
QString str =
"[{\"Name\":\"小明\",\"age\":18},{\"Name\":\"小王\",\"age\":20}]";
QJsonDocument jdoc = QJsonDocument::fromJson(str.toUtf8());
QJsonArray jLists = jdoc.array();
foreach (auto item, jLists) {
QJsonObject item_object = item.toObject();
qInfo() << "===============================";
qInfo() << "name:" << item_object.value("Name").toString();
qInfo() << "age:" << item_object.value("age").toDouble();
}
}
运行结果
===============================
name: "小明"
age: 18
===============================
name: "小王"
age: 20
公众号:【qt小王子】