1、JSon简介
JSON 是一种开放的数据交换格式,人与机器均可读取。JSON 与任何编程语言无关,是各种应用程序中常见的 API 输出。JSON 使用带有键值对的类似地图的结构,JSON 的语法更紧凑,更易于读写。JSON 支持数字、对象、字符串和布尔数组。
Json的基本语法如下表所示:

2、具体的实现代码如下:
cpp
#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonValue>
#include <QVariantMap>
#include <QStringList>
#include <QDebug>
// 修改並按順序輸出 JSON
QString orderedJsonSerialize(const QVariantMap &data, const QStringList &order) {
QStringList jsonParts;
foreach (const QString &key, order) {
if (!data.contains(key)) continue;
QString valueStr;
QVariant val = data[key];
// 根據類型處理數值、字串等(此處僅處理基本類型,若有對象/數組需遞迴)
if (val.type() == QVariant::String) {
valueStr = QString("\"%1\": \"%2\"").arg(key, val.toString());
} else if (val.type() == QVariant::Int || val.type() == QVariant::Double) {
valueStr = QString("\"%1\": %2").arg(key, val.toString());
} else if (val.type() == QVariant::Bool) {
valueStr = QString("\"%1\": %2").arg(key, val.toBool() ? "true" : "false");
} else {
valueStr = QString("\"%1\": null").arg(key);
}
jsonParts << valueStr;
}
return "{\n " + jsonParts.join(",\n ") + "\n}";
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 1. 存儲數據(使用 QVariantMap 方便修改)
QVariantMap data;
data["vd"] = "video_data";
data["ame"] = "my_name";
data["status"] = "active";
data["version"] = 5.12;
// 2. 隨意修改數據
data["status"] = "modified";
data["version"] = 6.0;
// 3. 定義輸出順序
QStringList order = {"vd", "ame", "status", "version"};
// 4. 按順序序列化
QString orderedJson = orderedJsonSerialize(data, order);
qDebug().noquote() << "Ordered JSON Output:\n" << orderedJson;
return 0;
}
1)首先定义显示顺序:
cpp
//定義輸出順序
QStringList m_ListOrder = {"Operation_Type", "Bearing_Type", "Bearing_XC", "Bearing_XZDW","Bearing_XZNY",\
"Bearing_XZBH", "Bearing_DXDW", "Bearing_DXNY", "Bearing_DXBH","Bearing_YBJDW",\
"Bearing_YBJNY", "Bearing_YBJBH", "Bearing_SZRQ", "Bearing_NJ1","Bearing_NJ2",\
"SealSeat_NJ1", "SealSeat_NJ2", "TrackNo", "Size_Type","Serial_No"};
2)数据初始化
cpp
m_VariantMap["Operation_Type"] = "Add";
m_VariantMap["Bearing_Type"] = "352226X2-2RZ";
m_VariantMap["Bearing_XC"] = "新造";
m_VariantMap["Bearing_XZDW"] = "SKF";
3)修改需要修改的数据(键值对)
m_VariantMap["Bearing_Type"]=ui->comboBoxP1AxisType->currentText();
4)数据转换为字符串
QString strSearchInfo= orderedJsonSerialize(m_VariantMap, m_ListOrder);
转换为QString后可便于显示。
3、其它类介绍
QStringList 是一个专门用于存储和处理 字符串列表 的类。它继承自 QList<QString>,因此拥有 QList 的所有高效特性,并在此基础上增加了一些专门针对字符串处理的便捷功能。
**QVariantMap**并不是一个全新的类,而是 QMap<QString, QVariant> 的类型别名。它是一个非常强大的容器,专门用于存储 键值对(Key-Value Pairs) ,其中键(Key)固定为字符串,而值(Value)可以是 任何类型 。核心作用是:JSON 数据转换, 这是 QVariantMap 最常见的用途。Qt 的 QJsonObject 可以直接转换为 QVariantMap(通过 toVariantMap()),这使得在 C++ 中处理复杂的 JSON 数据变得像操作普通 Map 一样简单。