情况: 我的传感器测量在NodeRED函数中处理的数据,然后解析为JSON对象。 NodeRED函数使我可以编写JavaScript代码。 JSON对象被发送到用C ++编写的接收模块,该接收模块可通过JSON_spirit库在JSON上运行。我无法更改接收模块。
问题:接收方的应用尝试使用功能value.get_float()
获取JSOn的一个值。传感器有时会精确测量1.00。它将以{"value":1}
的形式传递给JSON。接收模块以错误终止:
terminate called after throwing an instance of 'std::runtime_error'
what(): get_value< real > called on integer Value
很显然,函数value.get_float()
似乎无法将1更改为1.0,并且如上所述,我无法更改所使用的函数。因此,我需要找到一种方法将{"value":1.00}
解析为JSON。
我尝试过的事情:
我在NodeRED函数value.toFixed(2)
中尝试过,但这将返回字符串{"value":"1.00"}
。
所以,我尝试像这样再次将字符串解析为浮点数
value.toFixed(2);
value = parseFloat(value);
但是这将再次导致1.00生成如下的JSON:{"value":1}
。
我也尝试过一些四舍五入的技巧,但是JavaScript可以省略不必要的小数,就可以了。所以,我还没有找到解决方法。
欢迎提出任何想法。
P.S .:这是我第一次遇到StackOverflow问题,所以请不要对我太苛刻:)
编辑:我发现了以下解决方法。
我在第一个音符中使用value.toFixed(2);
来获取{"value":"1.00"}
。稍后,我在NodeRED的change-Node中的字符串上使用正则表达式。
正则表达式:
"Value":\"(\d+\.\d{2})\"
替换为:
"Value":$1
我的实际案例比示例要复杂一些,因此正则表达式要更长一些。但是regex101的帮助很大。
答案 0 :(得分:0)
认为此帖子已经存在: Force float value when using JSON.stringify
所以我认为Javascript中1和1.0之间没有区别