赞
踩
一个对象, 由一个大括号表示:
括号中 描述对象的属性:
通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
{
"name":"小明",
"info":"学生"
}
在JSON格式中可以与对象互相嵌套
[元素1,元素2…]
[
{
"dt": "20240417020000968"
},
{
"ids": [
{
"dis": 608,
"id": 131859
}
],
"lv": 1,
"nm": "C1"
},
{
"ids": [
{
"dis": 0,
"id": 131859
}
],
"lv": 0,
"nm": "C1-22"
}
]
QJsonDocument 类提供了一种读取和写入 JSON 文档的方法。
QJsonDocument 是一个包装完整 JSON 文档的类,可以从基于 UTF-8 编码的文本表示以及 Qt 自己的二进制格式读取和写入此文档。
可以使用 QJsonDocument::fromJson() 将 JSON 文档从其基于文本的表示形式转换为 QJsonDocument。toJson() 将其转换回文本。解析器非常快速和高效,并将JSON转换为Qt使用的二进制表示。
解析文档的有效性可以通过 !isNull() 查询
可以使用 isArray() 和 isObject() 查询文档是否包含数组或对象。可以使用 array() 或 object() 检索文档中包含的数组或对象,然后读取或操作。
也可以使用 fromBinaryData() 或 fromRawData() 从存储的二进制表示形式创建文档。
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>
int main()
{
// 创建一个JSON对象
QJsonObject object;
object.insert("name", "John");
object.insert("age", 30);
// 将JSON对象转换为QJsonDocument
QJsonDocument document(object);
// 将QJsonDocument转换为QByteArray
QByteArray data = document.toJson();
// 输出QByteArray
qDebug() << data;
// 将QByteArray转换为QJsonDocument
QJsonDocument newDocument = QJsonDocument::fromJson(data);
// 将QJsonDocument转换为JSON对象
QJsonObject newObject = newDocument.object();
// 获取JSON对象中的值
QString name = newObject.value("name").toString();
int age = newObject.value("age").toInt();
// 输出值
qDebug() << "Name: " << name;
qDebug() << "Age: " << age;
return 0;
}
int Widget::parseJsonData(QString name,QString strData)
{
QString str = "[{\"dt\":\"20240417020000968\"},{\"ids\":[{\"dis\":608,\"id\":131859}],\"lv\":1,\"nm\":\"C1\"},{\"ids\":[{\"dis\":0,\"id\":131859}],\"lv\":0,\"nm\":\"C1-22\"}]";
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8());
// 检查文档是否正确解析
if (doc.isNull())
{
// qDebug() << "Failed to parse JSON";
QMessageBox::warning(this,"warn",QStringLiteral("Failed to parse JSON"));
return 0;
}
// 从文档中提取数组
QJsonArray array = doc.array();
// 遍历数组中的每个元素
for (const QJsonValue &value : array)
{
// 如果值是对象(对象是数组的成员)
if (value.isObject())
{
QJsonObject obj = value.toObject();
// 从对象中提取 "dt" 字段的值
if (obj.contains("dt"))
{
//qDebug() << "dt:" << obj["dt"].toString();
}
// 从对象中提取 "ids" 字段的值。注意 "ids" 是一个嵌套的数组
if (obj.contains("ids"))
{
QJsonArray idsArray = obj["ids"].toArray();
for (const QJsonValue &subValue : idsArray)
{
QJsonObject subObj = subValue.toObject();
int dis = subObj["dis"].toInt();
int id = subObj["id"].toInt();
// qDebug() << "dis:" << dis << ", id:" << id;
}
}
// 从对象中提取 "lv" 和 "nm" 字段的值
if (obj.contains("lv") && obj.contains("nm"))
{
// qDebug() << "lv:" << obj["lv"].toInt();
//qDebug() << "nm:" << obj["nm"].toString();
QString curname = obj["nm"].toString();
int curValue = obj["lv"].toInt();
if(curname == name )
{
return curValue;
}
}
}
}
}
文章参考链接这里
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。