jsoncpp:将字符串转换为双精度

jsoncpp: convert string to double

我正在尝试从 JSON 对象中获取一个我知道代表小数的字符串,并将其分配给 C++ 中的双精度数。

人们会期望 asDouble() 完成这项工作,但事实并非如此。例如,如果我们将数组 ["0.4983", "4387"] 放在变量 Json::Value arr 中,则执行

double x = arr[0].asDouble()

抛出异常Value is not convertible to double.

执行此操作的推荐方法是什么(在 C++ 11 中)?

我的猜测是 "0.4983" 是一个字符串,所以 jsoncpp 拒绝将其转换为双精度。这是合理的,因为通常将 "abc" 之类的字符串转换为 double 是没有意义的。

你需要的是手动将字符串转换为double;在 C++11 中它将是 stod.

看看源码:https://github.com/oftc/jsoncpp/blob/master/src/lib_json/json_value.cpp#L852

显然在 jsoncpp 中只有 intuintrealnullboolean 可以强制转换为 double. string 不在列表中。

Whosebug 上有很多答案,说明如何自己进行字符串-> 双重转换。其中之一:C++ string to double conversion

此外还有 Value::isConvertibleTo() 允许您在运行时查找值是否可转换为类型:https://github.com/oftc/jsoncpp/blob/master/src/lib_json/json_value.cpp#L924