JQ:Bigint Numbers精度

时间:2019-04-15 12:16:44

标签: json jq

我实际上遇到了一个问题,我遇到了BIGINT问题,并且在jq 1.5 / 1.6(在Windows环境中)中遇到了模糊问题。 我阅读了问题报告,并认为,如果将数字转换为字符串,则可以处理。但是我用一个特定的命令测试了它,结果是一样的

[. | { last_update: .starbase_detailed_scan.last_update_time, user_name: .starbase_detailed_scan.owner_name, alliance_id: .starbase_detailed_scan.owner_alliance_id | tostring, drydocks: .starbase_detailed_scan.num_drydocks, tier: .starbase_detailed_scan.owner_level, defence_plattform: .starbase_detailed_scan.num_defence_platforms, shield_triggered: .starbase_detailed_scan.player_shield.triggered_on, shield_end: .starbase_detailed_scan.player_shield.expiry_time, parsteel: .starbase_detailed_scan.resources["2325683920"], tritanium: .starbase_detailed_scan.resources["743985951"], dilithium: .starbase_detailed_scan.resources["2614028847"], user_id: .starbase_detailed_scan.owner_user_id, defence_rating: .starbase_detailed_scan.defense_rating }]

结果:

[{"last_update":"2018-12-23T19:26:24","user_name":"Hamita40","alliance_id":"774615702811599900","drydocks":3,"tier":19,"defence_plattform":3,"shield_triggered":"0001-01-01T00:00:00","shield_end":"0001-01-01T00:00:00","parsteel":183649,"tritanium":22459,"dilithium":7074,"user_id":"a2588903decc455283c88508f6a7fedf","defence_rating":25200}]

Alliance_id不正确。正确的ID是:

774615702811599864

有什么解决方法吗?

BR 蒂莫

1 个答案:

答案 0 :(得分:1)

使用tostring将无济于事,因为tostring只能在jq解析器读取输入后看到后的数字。

jq维护者对这个问题了如指掌,确实有一个“拉请求”可以解决这个问题: https://github.com/stedolan/jq/pull/1752

如果您希望使用正式发行的jq版本,则唯一可用的“解决方法”是将JSON源中的数字更改为字符串。您可能希望使用“ bigint”库来处理“ bigint”字符串-https://github.com/joelpurra/jq-bigint