QJsonDocument是一个用于处理JSON(JavaScript Object Notation)文档的类。它提供了读写JSON文档的方法,可以将JSON文档以UTF-8编码的文本形式,和QT自身的二进制格式进行读写。
头文件:#include <QJsonDocument>
cmake:find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake:QT += core
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
JSON的优点在于其简洁和清晰的层次结构,使得它成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON对象是一个无序的“名称/值”对集合,以左括号“{”开始,右括号“}”结束。每个“名称”后跟一个冒号“:”,“名称/值”对之间使用逗号“,”分隔。
JSON数组是一个有序的“值”集合,以左括号“[”开始,右括号“]”结束。值之间使用逗号“,”分隔。
以下JSON文档例子,包含有id,value,title,colors,window五个属性,每个属性有对应的值。其中id是整数,value是浮点数,title是字符串,colors是数组,window是一个嵌套JSON对象,包括width、height二个整数属性。
{
"id": 100,
"value": 99.5,
"title": "20YC编程",
"colors": ["red", "green", "blue"],
"window":
{
"width": 1024,
"height": 720
}
}
/**** 例子: ****/
#include <QJsonDocument>
QString json_string = "{\"id\":100,\"value\":99.5,\"title\":\"20YC编程\",\"colors\":[\"red\",\"green\",\"blue\"],\"window\":{\"width\":1024,\"height\":720}}";
// 通过QString加载JSON文档。
QJsonDocument json_doc = QJsonDocument::fromJson(json_string.toUtf8());
将上面JSON文档保存到"my.json"文件。
/**** 例子: ****/
#include <QJsonDocument>
#include <QFile>
#include <QDebug>
// 打开JSON文件。
QFile file("my.json");
if (!file.open(QIODevice::ReadOnly))
{
return -1;
}
QByteArray byte_array = file.readAll();
file.close();
// 通过QByteArray加载JSON文档。
QJsonDocument json_doc = QJsonDocument::fromJson(byte_array);
支持多级属性访问,例如:int i_window_width = json_doc["window"]["width"].toInt();
/**** 例子: ****/
// 访问"id"属性。
int i_id = json_doc["id"].toInt(); // 返回 100
// 访问"value"属性。
double d_value = json_doc["value"].toDouble(); // 返回 99.5
// 访问"title"属性。
QString qstr_title = json_doc["title"].toString(); // 返回 "20YC编程"
// 访问 "window/width" 多级属性。
int i_window_width = json_doc["window"]["width"].toInt(); // 返回 1024
qDebug() << "id = " << i_id
<< ", value = " << d_value
<< ", title = " << qstr_title
<< ", window.width = " << i_window_width;
/**** 例子: ****/
#include <QJsonArray>
// 访问属性列表。
QJsonArray json_array = json_doc["colors"].toArray();
int i_colors_size = json_array.size(); // 返回 3。
// 遍历列表。
for (int i = 0; i < i_colors_size; ++i)
{
QString qstr_color = json_array[i].toString();
// 分别打印:"red","green","blue"
qDebug() << "color = " << qstr_color;
}
/**** 例子: ****/
// 通过QJsonValue访问属性。
QJsonValue json_value = json_doc["window"];
int i_width = json_value["width"].toInt(); // 返回 1024
int i_height = json_value["height"].toInt(); // 返回 720
qDebug() << "window.width = " << i_width << ", window.height = " << i_height;
#include <QCoreApplication>
#include <QJsonDocument>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 打开JSON文件。
QFile file("my.json");
if (!file.open(QIODevice::ReadOnly))
{
return -1;
}
QByteArray byte_array = file.readAll();
file.close();
// 通过QByteArray加载JSON文档。
QJsonDocument json_doc = QJsonDocument::fromJson(byte_array);
// // 通过QString加载JSON文档。
// QString json_string = "{\"id\":100,\"value\":99.5,\"title\":\"20YC编程\",\"colors\":[\"red\",\"green\",\"blue\"],\"window\":{\"width\":1024,\"height\":720}}";
// QJsonDocument json_doc = QJsonDocument::fromJson(json_string.toUtf8());
// 访问"id"属性。
int i_id = json_doc["id"].toInt(); // 返回 100
// 访问"value"属性。
double d_value = json_doc["value"].toDouble(); // 返回 99.5
// 访问"title"属性。
QString qstr_title = json_doc["title"].toString(); // 返回 "20YC编程"
// 访问 "window/width" 多级属性。
int i_window_width = json_doc["window"]["width"].toInt(); // 返回 1024
qDebug() << "id = " << i_id
<< ", value = " << d_value
<< ", title = " << qstr_title
<< ", window.width = " << i_window_width;
// 通过QJsonValue访问属性。
QJsonValue json_value = json_doc["window"];
int i_width = json_value["width"].toInt(); // 返回 1024
int i_height = json_value["height"].toInt(); // 返回 720
qDebug() << "window.width = " << i_width << ", window.height = " << i_height;
return a.exec();
}
关注公众号下载本示例完整源码(13_QJsonDocument_ReadXml.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~