【问题标题】:jq rounding large integers when it shouldn'tjq 在不应该时舍入大整数
【发布时间】: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

标签: json jq


【解决方案1】:

你可以使用 python json , 有效,我已经测试过了。

【讨论】:

  • OP 要求 jq 解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多