【发布时间】:2016-05-04 07:20:18
【问题描述】:
我正在尝试使用 jq ,其中我的数据中有一个大整数。示例:
$ cat door.json
[
{
"name": "Sliding Door 2",
"type": "MyAirtightSlideDoor",
"id": 130597706006447927,
"properties": {
"OnOff": "True",
"ShowInTerminal": "True",
"ShowInToolbarConfig": "True",
"ShowOnHUD": "False",
"Open": "True"
}
}
]
好的,我认为这是一个有效的 json 文件。但是当我让 jq 解析它时,它会破坏 ID 整数:
$ cat door.json | jq '.'
[
{
"name": "Sliding Door 2",
"type": "MyAirtightSlideDoor",
"id": 130597706006447920,
"properties": {
"OnOff": "True",
"ShowInTerminal": "True",
"ShowInToolbarConfig": "True",
"ShowOnHUD": "False",
"Open": "True"
}
}
]
我的最终目标是能够取出 id 并使用它来更深入地查询 API,但 130597706006447920 != 130597706006447927。
我在 centos 7 x86_64 AWS 实例上使用 1.5、1.4 和 1.3 版本的 64 位二进制文件对此进行了测试。
任何输入都会很棒。
【问题讨论】:
-
出现这种情况的原因是jq内部使用了64位浮点数。
-
为什么 jq 会默默地销毁长整数?它不应该至少警告用户吗?关于如何在不将 id 存储在字符串中的情况下阻止这种情况发生的任何想法?
-
抱歉,将 ID 存储在字符串中是可行的方法。不是因为 jq 支持或不支持它,而是因为 ID 应该是不透明的标识符,其唯一的定义特征是唯一性,而数字具有更多含义(加法、减法等)
-
供参考,这里有一张与此问题相关的公开票:github.com/stedolan/jq/issues/218