Ye0522. 2023-10-24 14:13 采纳率: 0%
浏览 542

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 00: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本身的特性。如果需要在整个项目中频繁地按插入顺序操作,可能需要考虑使用其他的库或者自己实现一个有序的数据结构。


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

    展开全部

    评论
    编辑
    预览

    报告相同问题?

    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部