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」は表現できない | ψ(プサイ)の興味関心空間