Qt5环境下Json数据按照设定顺序初始化修改和显示
1、JSon简介JSON 是一种开放的数据交换格式人与机器均可读取。JSON 与任何编程语言无关是各种应用程序中常见的 API 输出。JSON 使用带有键值对的类似地图的结构JSON 的语法更紧凑更易于读写。JSON 支持数字、对象、字符串和布尔数组。Json的基本语法如下表所示2、具体的实现代码如下#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首先定义显示顺序//定義輸出順序 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数据初始化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是一个专门用于存储和处理字符串列表的类。它继承自QListQString因此拥有QList的所有高效特性并在此基础上增加了一些专门针对字符串处理的便捷功能。QVariantMap并不是一个全新的类而是QMapQString, QVariant的类型别名。它是一个非常强大的容器专门用于存储键值对Key-Value Pairs其中键Key固定为字符串而值Value可以是任何类型。核心作用是JSON 数据转换这是QVariantMap最常见的用途。Qt 的QJsonObject可以直接转换为QVariantMap通过toVariantMap()这使得在 C 中处理复杂的 JSON 数据变得像操作普通 Map 一样简单。