如何让 jq 保留 bigint 值?

How do I get jq to preserve bigint values?

我有一个很大的 JSON 文件,其中包含 bigints 及其完整值——不像 JavaScript 默认喜欢做的那样四舍五入。 我们有一个解决方法来处理 Node.js 中的 bigints,但我正在尝试使用 jq(命令行工具)来清理我们的数据。 但是,当我 运行 jq 在我们的 JSON 文件上时,它舍入了我们所有的 bigints。

有没有一种方法可以使用 jq,这样它就不会舍入 bigints,或者是否有另一个命令行工具可以在 Mac 上工作,我可以改用它?

截至目前,关于 JSON 数字最好的 jq 是“master”版本,它很好地保留了外部数值。更新是在 2019 年 10 月 22 日左右进行的,jq 的“主”版本似乎与最新版本 (jq 1.6) 一样安全。

使用最新“主”版本的示例:

    jqMaster -n -M '
    [0000,
     10000000000000000000000000000000000000012, 
     1.0000000000000000000000000000000000000012, 
     1000000000000000000000000000000000000001210000000000000000000000000000000000000012,
     0.1e123456]'

输出

[
  0,
  10000000000000000000000000000000000000012,
  1.0000000000000000000000000000000000000012,
  1000000000000000000000000000000000000001210000000000000000000000000000000000000012,
  1E+123455
]

另一种选择是使用“gojq”,jq 的 Go 实现,它使用整数文字的无限精度表示。

事实上,除了在撰写本文时仅在 gojq 的“master”版本中修复的一个错误外,gojq 支持无限精度整数运算。错误修复:https://github.com/itchyny/gojq/commit/7a1840289029c9c038d61274ceac9b8d307c0358