2014-05-10 32 views
2

我有input_file如何防止jq自动将double转换为int?

{"hi":48.0, "yep":48.123} 

我运行这个

jq . <input_file> output_file 
cat output_file 

我的输出:

{ 
    "yep": 48.123, 
    "hi": 48 
} 

我想输出是

{ 
    "yep": 48.123, 
    "hi": 48.0 
} 

如何防止jq自动将我的double值转换为int?

回答

2

jq将数字解析为C双精度数。然后将它们格式化为数字。这种转换在两个方面是有损的:a)表示相同数字的方法很多,但jq只使用一个,并且没有别的选择,b)C双精度有限。

针对这两个问题都有针对jq的问题。可能的解决方案是采用bignum/bigfloat方法,并保留原始数字字符串以传递未经修改的数字(因为它是; jq将所有数据视为copy-on-write)。但那还没有实施。

+0

现在有一些东西:https://gist.github.com/pkoppstein/d06a123f30c033195841 – tripleee