qt json,QJsonDocument、QJsonObject、QJsonArray,json序列化
Qt 提供了对 JSON 数据格式的良好支持,主要通过 QJsonDocument、QJsonObject、QJsonArray、QJsonValue 和 QJsonParseError 等类来实现
QJsonArray 数组类型json,使用append来添加值,用于表示一系列项目,比如一组学生的名字或者嵌套的复合数据结构。
QJsonObject 对象类型,使用insert来添加 键值对,
二者可以互相嵌套使用
简单使用qjsonobject 和qjsonarray序列化
void MainWindow::serialize_json()
{
//序列化
QJsonObject objjson;
objjson.insert("name","yanlight");
objjson.insert("age",32);
objjson.insert("phone","15339153692");
QJsonArray _arr;
_arr.append("ceshi");
_arr.append("haixun");
// QByteArray _arr;
// _arr.append("ceshi");
// _arr.append("haixun");
objjson.insert("_arr",_arr);
QJsonDocument doc(objjson);
QByteArray jsonArry=doc.toJson();
qDebug()<<jsonArry;
qDebug()<<"---";
qDebug()<<doc.toJson(QJsonDocument::Indented);
2.反序列化
void parseJson() {
QString jsonStr = "{"name":"John", "age":30, "isStudent":false, "courses":["Math", "Science"]}";
QJsonDocument doc = QJsonDocument::fromJson(jsonStr.toUtf8());
if (!doc.isNull()) {
if (doc.isObject()) {
QJsonObject jsonObject = doc.object();
qDebug() << "Name:" << jsonObject["name"].toString();
qDebug() << "Age:" << jsonObject["age"].toInt();
qDebug() << "Is Student:" << jsonObject["isStudent"].toBool();
if (jsonObject.contains("courses") && jsonObject["courses"].isArray()) {
QJsonArray courses = jsonObject["courses"].toArray();
for (const QJsonValue &value : courses) {
qDebug() << "Course:" << value.toString();
}
}
} else {
qDebug() << "Document is not an object.";
}
} else {
qDebug() << "Failed to parse JSON";
}
3.嵌套使用
void createComplexJson() {
// 创建一个包含课程的JSON对象
QJsonObject course1;
course1.insert("name", "Mathematics");
course1.insert("grade", "A");
QJsonObject course2;
course2.insert("name", "Physics");
course2.insert("grade", "B");
// 创建一个包含多个课程的JSON数组
QJsonArray courses;
courses.append(course1);
courses.append(course2);
// 创建一个学生信息的JSON对象,并将课程数组作为其一部分
QJsonObject student;
student.insert("name", "Alice");
student.insert("age", 20);
student.insert("courses", courses);
// 将整个学生信息转换为JSON文档并输出
QJsonDocument doc(student);
qDebug() << doc.toJson(QJsonDocument::Indented);
}
4.错误处理
当解析 JSON 数据时,检查是否成功以及获取任何可能的错误信息是很重要的。可以使用 QJsonParseError 类来捕获解析过程中遇到的问题:
cpp
深色版本
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(jsonStr.toUtf8(), &error);
if (doc.isNull()) {
qDebug() << "JSON parse error:" << error.errorString();
}
浙公网安备 33010602011771号