我正在尝试从一个JSON对象中获取一个字符串,并将其赋给C++中的双精度值。
人们会期望asDouble()来完成这项工作,但事实并非如此。例如,如果我们将数组["0.4983", "4387"]放在变量Json::Value arr中,则执行以下操作
double x = arr[0].asDouble()引发异常Value is not convertible to double.
推荐的方法是什么(在C++ 11中)?
发布于 2017-08-05 02:18:53
我猜测"0.4983"是一个字符串,所以jsoncpp拒绝将其转换为双精度型。这是合理的,因为通常情况下,将"abc"之类的字符串转换为double是没有意义的。
您需要的是手动将字符串转换为stod;在C++11中,它将是double。
发布于 2017-08-05 02:25:47
只需看一下源代码:https://github.com/oftc/jsoncpp/blob/master/src/lib_json/json_value.cpp#L852
显然,在jsoncpp中,只有int、uint、real、null和boolean可以被强制为double。string不在列表中。
在stackoverflow上有许多答案解释了如何自己进行字符串->双重转换。其中之一:C++ string to double conversion
此外,还有一个允许您在运行时查找某个值是否可转换为类型的Value::isConvertibleTo():https://github.com/oftc/jsoncpp/blob/master/src/lib_json/json_value.cpp#L924
https://stackoverflow.com/questions/45506919
复制相似问题