Ye0522. 2023-10-24 22:13 采纳率: 0%
浏览 115

QT JSON中QJsonObject不按insert顺序,而是按ASCII自动排序

QT开发JSON中碰到关于QJsonObject不按insert顺序,而是按ASCII自动排序的问题,CSDN了很久都没有找到解决方法,请教下各位大虾?

代码如下:
        QJsonObject obj;
        obj.insert("name", "Tom");
        obj.insert("Sex", "man");
        obj.insert("age", 33);

实际输出:
{
    "Sex": "man",
    "age": 33,
    "name": "Tom"
}

我希望按插入顺序输出:
{
    "name": "Tom",
    "Sex": "man",
    "age": 33
}
QJsonArray是按插入顺序的,但是我不能改成这种形式。

        QJsonArray array;
        array.append(22);
        array.append(2);
        array.append(1);
        array.append(11);

实际输出:[22,2,1,11]
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-25 08:10
    关注

    【以下回答由 GPT 生成】

    问题的原因是QJsonObject是基于哈希表实现的,所以它不保证按照插入顺序来保存键值对。如果希望按插入顺序输出,可以考虑使用QJsonArray来代替QJsonObject来保存数据。

    下面是一个解决方案,将键和值存储在QJsonArray中,实现按插入顺序输出的效果:

    // 定义一个QJsonArray来保存键值对
    QJsonArray jsonArray;
    
    // 添加键值对到QJsonArray中
    jsonArray.append(QJsonObject({{"key", "name"}, {"value", "Tom"}}));
    jsonArray.append(QJsonObject({{"key", "Sex"}, {"value", "man"}}));
    jsonArray.append(QJsonObject({{"key", "age"}, {"value", 33}}));
    
    // 将QJsonArray转换为QJsonObject
    QJsonObject obj;
    for (const QJsonValue& value : jsonArray) {
        QJsonObject jsonObject = value.toObject();
        QString key = jsonObject.value("key").toString();
        QJsonValue jsonValue = jsonObject.value("value");
        obj.insert(key, jsonValue);
    }
    
    // 输出结果
    qDebug() << QJsonDocument(obj).toJson();
    

    输出结果如下所示:

    {
        "name": "Tom",
        "Sex": "man",
        "age": 33
    }
    

    这样就可以按照插入顺序输出了。

    不过请注意,这种方法只是一个workaround,它不是QJsonObject本身的特性。如果需要在整个项目中频繁地按插入顺序操作,可能需要考虑使用其他的库或者自己实现一个有序的数据结构。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月24日

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题