あお日記

理系研究者のブログです。勉強したことや本の感想などを中心に残して行くつもりです。

jqコマンドで値が変わって困った話

JSONを見やすく表示するためにjqコマンドを使っていた際、整形前後で値が変わっており困ったのでブログに残しておきます。

jqの中で数値をdoubleで持っている事が原因のようですが、コードを読んだりはしていないので別部分かも知れません。

以下は具体的に詰まった状況。

ryuが提供しているofctl_rest.pyを使ってREST APIでdpidの値を取ってました。
まずはデフォルト。値が少し見づらいです。

User:~$ curl -s -X GET http://localhost:8080/stats/switches
[992291725058348458]User:~$ 

そこでjqを使うとこうなります。お尻の方が丸まってしまい値が変わっています。
数値精度の問題のようですが、この現象に気付かずしばらく困りました。

User:~$ curl -s -X GET http://localhost:8080/stats/switches | jq '.[]'
992291725058348400

解決策として、デフォルトのままでも良いのですが変わりにpython -mjson.toolを使うと値はそのままで見やすく表示できました。

User:~$ curl -s -X GET http://localhost:8080/stats/switches | python -mjson.tool
[
    992291725058348458
]

めでたしめでたし。
こちらのブログを非常に参考にさせて頂きました。ありがとうございました。
やっぱりdoubleでは「76287755398823936」は表現できない | ψ(プサイ)の興味関心空間