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

相关推荐
ID_180079054732 天前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
代码AI弗森2 天前
配置文件战争:TOML/YAML/JSON 为何成为不同框架的“专属标配”?
json
lifewange3 天前
CNode API v1 完整接口文档(JSON 规范整理)
java·前端·json
测试修炼手册3 天前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
九转成圣3 天前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
小袁拒绝摆烂3 天前
多表关联大平层转JSON树形结构
java·json
学术阿凡提3 天前
Spring Boot 集成 Fastjson2 完整教程:从入门到避坑
spring boot·安全·json
LIUAWEIO3 天前
鸽鸽工具网:免费在线工具大全,打开网页即用
人工智能·安全·ai·json
半天法师4 天前
Bug 记录:UE 结构体转 JSON 时 Key 字段大小写异常 (Editor 与打包后表现不一致)
ai·ue5·json·bug
鸽芷咕4 天前
KingbaseES数据类型完全指南:从基础CHAR到JSON/XML/几何类型
xml·oracle·json