c++ - 为什么 nlohmann/json 在 double 上序列化 "null"而不是 "0"?

标签 c++ json serialization null nlohmann-json

假设我在 C++ 中部分初始化了一个原生 double 组,并使用 nlohmann/json 将其序列化:

const int numPoints = 10;
double mLengths[numPoints];
for (int i = 0; i < 5; i++) {
    mLengths[i] = i + 0.1 * i; 
}

nlohmann::json jsonData;
jsonData["lengths"] = mLengths;
std::string serialized_string = jsonData.dump();

它将正确序列化如下内容:

{  
   "lengths":[  
      0.0,
      1.1,
      2.2,
      3.3,
      4.4,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61
   ]
}

但有时,它不是从内存中获取“随机 double ”,而是将值 null 存储在 json 中,因此它会产生如下结果:

{  
   "lengths":[  
      0.0,
      1.1,
      2.2,
      3.3,
      4.4,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      null,
      -9.255963134931783e+61,
      -9.255963134931783e+61
   ]
}

当我反序列化它时,它抛出了一个异常type must be number, but is null

为什么序列化null而不是0?它是否从内存中获取“空”的东西? C++ 中不是 0 吗?

最佳答案

序列化步骤的行为,以及整个程序的行为,未定义

在 C++ 中,您必须永远尝试读取未初始化的内存,除非您强制转换为 unsigned char 类型。

不同输出的“有时”性质是这种未定义行为的表现。

关于c++ - 为什么 nlohmann/json 在 double 上序列化 "null"而不是 "0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52715143/

相关文章:

javascript - Underscore.js,将当前日期设置为包含过去日期的键

symfony - 如何使用 JMS Serializer 和 Symfony2 实现模型侧加载

c++ - cython cmake 模块运行时错误

c++ - 将程序 (.exe) 作为线程执行 - Window C++

c++ - addr2line 获取行号总是返回 0

json - 如何在 swift xcode 中为多个 json 表创建结构

java - 测试正确 JSON 序列化的最佳方法

java - 自定义(反)序列化方法抛出 java.io.OptionalDataException

c# - 将 POST FromBody 转换为 HttpRequestMessage - 需要对请求正文进行反序列化

c++ - 在哪里可以找到最新的 C++14 标准草案