You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用nlohmann json键值对字母重排 保留键插入顺序

nlohmann json序列化时键自动按字母排序的解决方法

问题原因

nlohmann json默认的nlohmann::json类型底层采用std::map存储对象键值对,std::map是基于红黑树实现的有序关联容器,会自动按照键的字典序排序,因此最终序列化输出的键顺序和插入顺序不一致。

解决方案

优先使用库内置的nlohmann::ordered_json类型(nlohmann json v3.9.0及以上版本原生支持),该类型底层采用维护插入顺序的容器存储键值对,不会自动重排键顺序,原有业务代码几乎不需要改动,仅需替换类型声明即可:

// 将原有的nlohmann::json替换为nlohmann::ordered_json
nlohmann::ordered_json payload = {{"type", "market"},
        {"side", "buy"},
        {"product_id",market},
        {"funds", size}};
std::cout << payload.dump() << std::endl;

修改后序列化输出会严格遵循键的插入顺序:

{"type":"market","side":"buy","product_id":"BTC-USD","funds":"10"}

如果使用v3.9.0以下的旧版本,可通过自定义模板参数,指定支持插入序的容器(如vector封装的有序map)作为底层存储,但更推荐直接升级库版本使用内置实现,避免自定义特化引入兼容问题。

注意:JSON官方规范并未强制要求对象的键顺序,绝大多数JSON解析场景也不会依赖键的排列顺序。如果业务没有强依赖键的输出顺序,使用默认nlohmann::json类型的存取性能更优。

内容的提问来源于stack exchange,提问作者dopller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:03:31