有没有办法让encode_json
方法不在数字周围加上引号?
例如,我在 CentOS 6.3 上使用 perl 5.10(在 Win 7 上也使用 ActiveState perl 5.16),它把引号放在不应该的地方:
# perl -MJSON -e 'print encode_json({a => [split(",", "1.2,30")]});'
{"a":["1.2","30"]}
也就是说,好的,它在上面的代码中将“1.2”和“30”视为字符串,但我的问题是:
我的 perl 脚本使用 Google Charts解析 CSV 文件并生成 HTML 文件,后者因在数字值周围加上引号而感到困惑(尽管我告诉他们该列的类型是“数字”)。
作为一种解决方法,我遍历我的数据结构并将每个数字替换为,sprintf "%f", $val
但这会导致在每个数字之后显示太多空值,这使得图表正确,但看起来很难看:
# perl -e 'printf "%f", "30"'
30.000000
更新:
是的,乍一看,添加零或乘以一似乎有效:
# perl -MJSON -e 'print encode_json({a => [map {1 * $_} split(",", "1.2,30")]});'
{"a":[1.2,30]}
但在我的真实脚本中,它仍然不适用于浮点数。
当使用 Dumper 模块时,您也可以在 CLI 中看到我仍然遇到的问题:
# perl -MData::Dumper -e 'print Dumper({a => [map {1.0 * $_} split(",", "1.2,30")]});'
$VAR1 = {
'a' => [
'1.2', # <= THIS IS MY PROBLEM AND CONFUSES GOOGLE CHARTS
30
]
};