使用jsoncpp序列化数组时相同值元素无法全部输出的解决方案问询
是否存在数组相同值优化逻辑
jsoncpp官方不存在针对数组相同值的合并优化逻辑,你遇到的相同元素输出缺失是1.8.0之前版本的已知序列化bug,仅在连续插入多个相同基础类型(整型、布尔型等)元素时触发,插入不同值元素时不会命中该bug,和你的测试表现一致。
解决方案
- 方案1:升级jsoncpp到1.8.0及以上稳定版本,官方已在该版本修复了连续相同元素序列化丢失的问题,升级后原有代码无需任何修改即可正常输出
"array" : [ 0, 0, 0 ]。 - 方案2:如果受项目环境限制无法升级库版本,可通过插入占位元素的方式临时规避bug,示例代码如下:
Json::Value root, arr; const int targetVal = 0; const int insertCount = 3; for (int i = 0; i < insertCount; ++i) { // 先插入临时占位元素再删除,破坏连续相同元素的bug触发条件 arr.append(Json::Value("temp_placeholder")); arr.append(targetVal); arr.removeIndex(arr.size() - 2, nullptr); } root["array"] = arr;
- 方案3:修改序列化输出配置,关闭旧版本可能默认开启的压缩逻辑,示例代码如下:
Json::StyledWriter writer; // 部分旧版本参数名为enableCompression,设为false即可 writer.enablePrecision = false; std::string jsonStr = writer.write(root); std::cout << jsonStr << std::endl;
内容的提问来源于stack exchange,提问作者Ainbin
相关产品推荐
相关产品推荐

