jsoncpp:将字符串转换为双精度 我试图从一个JSON对象中提取一个字符串,它表示一个十进制,并将它分配给C++中的一个双倍。

jsoncpp:将字符串转换为双精度 我试图从一个JSON对象中提取一个字符串,它表示一个十进制,并将它分配给C++中的一个双倍。,c++,json,c++11,type-conversion,jsoncpp,C++,Json,C++11,Type Conversion,Jsoncpp,人们可能期望asDouble()能够完成这项工作,但事实并非如此。例如,如果数组[“0.4983”,“4387”]位于变量Json::Value arr中,则执行以下操作: double x = arr[0].asDouble() 抛出异常值不能转换为双精度。 什么是推荐的方法(在C++ 11)?< /p> < p>我猜是“0.4983”< /C>是一个字符串,所以JSONCPP拒绝将它转换成双。这是合理的,因为通常将诸如“abc”之类的字符串转换为double是没有意义的 您需要的是手动将字

人们可能期望
asDouble()
能够完成这项工作,但事实并非如此。例如,如果数组
[“0.4983”,“4387”]
位于变量
Json::Value arr
中,则执行以下操作:

double x = arr[0].asDouble()
抛出异常
值不能转换为双精度。

什么是推荐的方法(在C++ 11)?< /p> < p>我猜是<代码>“0.4983”< /C>是一个字符串,所以JSONCPP拒绝将它转换成双。这是合理的,因为通常将诸如

“abc”
之类的字符串转换为double是没有意义的


您需要的是手动将字符串转换为double;在C++11中应该是这样的。

只要看看源代码:

显然,在
jsoncpp
中,只有
int
uint
real
null
boolean
可以强制为
double
<代码>字符串不在列表中

在stackoverflow Exampling如何自己进行字符串->双重转换中有很多答案。其中一项:


此外,还有
Value::isConvertibleTo()
允许您在运行时查找值是否可转换为类型:

当您这样尝试时可能发生的重复:
Json::Value val=arr[0];double x=val.asDouble()
arr.isArray()的返回值是多少??这就是我目前正在做的事情。据我所知——如果我弄错了,请纠正我——Json不支持浮点数,只支持整数。因此,Json中的任何十进制都必须用字符串表示,即用双引号括起来。考虑到在Json对象中传递小数是多么常见,我觉得jsoncpp应该提供一个函数来将字符串转换为双精度,如果不可能进行转换,就会抛出异常。毕竟,这正是第一次读入
std::string
,然后尝试使用
std::stod
转换为double时要做的事情;我相信一个现代化的json库会支持它。但是
[“4.5”]
是一个字符串数组,而
[4.5]
是一个浮点数数组。所以基本上,将浮点数打包成字符串放在Json中是不好的形式。我们只能希望数据提供者在某个时候会改变这一点,并且在那之前必须通过
std::stod
进行转换。谢谢