Qt5环境下Json数据按照设定顺序初始化修改和显示

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 一样简单。

相关推荐
A__tao3 小时前
一键实现 SQL → ES Mapping 转换,支持自定义 `text` 为 `json` 转换
sql·elasticsearch·json
Mike_66615 小时前
txt_json和xml_json
xml·python·json
DevOpenClub15 小时前
语义化获取站点 JSON 结构内容 API 接口
json
互联网散修1 天前
零基础鸿蒙应用开发第三十二节:JSON核心基础与文件的读写
华为·json·harmonyos
web3.08889991 天前
淘宝、京东、1688 拍立淘图搜 API 均返回 JSON 格式
python·json
曹牧2 天前
Oracle数据库中,将JSON字符串转换为多行数据
数据库·oracle·json
捧月华如2 天前
响应式设计原理与实践:适配多端设备的前端秘籍
前端·前端框架·json
kimi-2222 天前
如何让大语言模型稳定输出 JSON 的三层防御体系
人工智能·语言模型·json
历程里程碑3 天前
Protobuf vs JSON vs XML:小白该怎么选?
xml·大数据·数据结构·elasticsearch·链表·搜索引擎·json