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
}
}
QJsonObject是用于表示JSON对象的一个类。QJsonObject提供了一种方便的方式来处理JSON对象数据。
/**** 例子: ****/
#include <QJsonObject>
// 创建一个空JSON对象。
QJsonObject json_object;
/**** 例子: ****/
// 添加整数。
json_object["id"] = 1;
// 添加浮点数。
json_object["value"] = 99.9;
// 添加字符串。
json_object["title"] = "20YC编程";
/**** 例子: ****/
#include <QJsonArray>
// 创建一个空QJsonArray数组对象。
QJsonArray json_array;
json_array.append("red"); // 数组对象添加元素
json_array.append("green"); // 数组对象添加元素
json_array.append("blue"); // 数组对象添加元素
json_array.append("white"); // 数组对象添加元素
// 添加数组对象到JSON对象中。
json_object["colors"] = json_array;
/**** 例子: ****/
// 创建空QJsonObject子对象。
QJsonObject child_object;
child_object["x"] = 0; // 子对象添加元素
child_object["y"] = 0; // 子对象添加元素
child_object["width"] = 1024; // 子对象添加元素
child_object["height"] = 720; // 子对象添加元素
// 添加子对象到JSON对象中。
json_object["window"] = child_object;
/**** 例子: ****/
// 将JSON对象转换为QJsonDocument。
QJsonDocument json_doc(json_object);
QJsonDocument支持生成二种JSON格式化文档,通过QJsonDocument::JsonFormat枚举类型表示,宏定义如下:
QJsonDocument::Indented 0 生成格式化的、易于阅读的 JSON 字符串。
QJsonDocument::Compact 1 生成紧凑的、没有额外空格或换行的 JSON 字符串。
// 访问函数。
QByteArray toJson() const
QByteArray toJson(QJsonDocument::JsonFormat format) const
/**** 例子: ****/
// 转JSON字符串。
QString qstr_json = json_doc.toJson(QJsonDocument::Indented);
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QFile>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建一个空JSON对象。
QJsonObject json_object;
// 添加整数。
json_object["id"] = 1;
// 添加浮点数。
json_object["value"] = 99.9;
// 添加字符串。
json_object["title"] = "20YC编程";
// 添加QJsonArray数组对象。
QJsonArray json_array; // 创建一个空QJsonArray数组对象。
json_array.append("red"); // 数组对象添加元素
json_array.append("green"); // 数组对象添加元素
json_array.append("blue"); // 数组对象添加元素
json_array.append("white"); // 数组对象添加元素
json_object["colors"] = json_array;
// 添加QJsonObject子对象。
QJsonObject child_object; // 创建空QJsonObject子对象。
child_object["x"] = 0; // 子对象添加元素
child_object["y"] = 0; // 子对象添加元素
child_object["width"] = 1024; // 子对象添加元素
child_object["height"] = 720; // 子对象添加元素
json_object["window"] = child_object;
// 将JSON对象转换为QJsonDocument。
QJsonDocument json_doc(json_object);
// 将JSON文档保存到"newSample.json"文件。
QFile file("newExample.json");
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
file.write(json_doc.toJson()); // 保存到文件。
file.close();
}
return 0;
}
运行这个程序将创建一个名为"newExample.json"的JSON文档文件。
newExample.json内容如下:
{
"colors": [
"red",
"green",
"blue",
"white"
],
"id": 1,
"title": "20YC编程",
"value": 99.9,
"window": {
"height": 720,
"width": 1024,
"x": 0,
"y": 0
}
}
关注公众号下载本示例完整源码(14_QJsonDocument_WriteXml.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~