JSONデータでjqを使用して整数をドルに変換する方法は?

JSONデータでjqを使用して整数をドルに変換する方法は?

このようなデータがあります。

{
  "dateCreated": "2020-06-12",
  "status": "pending",
  "depositDate": "2020-06-15",
  "amount": 41237
}
{
  "dateCreated": "2020-06-05",
  "status": "paid",
  "depositDate": "2020-06-08",
  "amount": 37839
}
{
  "dateCreated": "2020-04-02",
  "status": "paid",
  "depositDate": "2020-04-03",
  "amount": 67
}

形式はjq次のとおりです。

 request-some-api | jq '.data[] | {dateCreated: .created | strftime("%Y-%m-%d"), status: .status, depositDate: .arrival_date | strftime("%Y-%m-%d"), amount: .amount,}'

.amount小数点以下の桁数を使用して、セントではなくドルの金額で値を表示するように変更したいのですが...

{
  "dateCreated": "2020-06-12",
  "status": "pending",
  "depositDate": "2020-06-15",
  "amount": $412.37
}
{
  "dateCreated": "2020-06-05",
  "status": "paid",
  "depositDate": "2020-06-08",
  "amount": $378.39
}
{
  "dateCreated": "2020-04-02",
  "status": "paid",
  "depositDate": "2020-04-03",
  "amount": $.67
}

...しかし、これに関する文書が見つかりませんでしたか?jqこのような変換は可能ですか?記号がなくても、ドルとセントの間に数字$だけを追加すると.便利です。

答え1

このように:

jq '.amount = "$" + (.amount/100|tostring)' file.json

出力

{
  "dateCreated": "2020-06-12",
  "status": "pending",
  "depositDate": "2020-06-15",
  "amount": "$412.37"
}
{
  "dateCreated": "2020-06-05",
  "status": "paid",
  "depositDate": "2020-06-08",
  "amount": "$378.39"
}
{
  "dateCreated": "2020-04-02",
  "status": "paid",
  "depositDate": "2020-04-03",
  "amount": "$0.67"
}

答え2

希望の出力形式が間違っているようです。 「amount」を文字列値として使用したいと思います。

最初に$を追加してから、金額を100で割って文字列に変換します。

例えば

jq '.amount = "$" + (.amount/100|tostring)'

amountテストファイルでこれを行うと、3行が次のように変換されたことがわかります。

"amount": "$412.37"
"amount": "$378.39"
"amount": "$0.67"

しかし、ここにはいくつかの奇妙な状況があり、これは重要でも重要ではないかもしれません。金額がゼロで終わると(例:41230)、「$ 412.3」と表示されます。同様に、整数(41200)の場合、「$ 412」が表示されます。

jqこれらの問題を簡単に処理する方法があるかどうかわからないため、いくつかのテストを追加しました。

jq '.amount = "$" + (.amount/100|tostring) + (if .amount%100 == 0 then ".0" else "" end ) + (if .amount%10 ==0 then "0" else "" end)'

より効率的な方法があるかもしれません。

答え3

$ jq '.amount |= "$" + (./100 | tostring | ltrimstr("0"))' file
{
  "dateCreated": "2020-06-12",
  "status": "pending",
  "depositDate": "2020-06-15",
  "amount": "$412.37"
}
{
  "dateCreated": "2020-06-05",
  "status": "paid",
  "depositDate": "2020-06-08",
  "amount": "$378.39"
}
{
  "dateCreated": "2020-04-02",
  "status": "paid",
  "depositDate": "2020-04-03",
  "amount": "$.67"
}

これはamountキー値を100で割った後に文字列に変換します。次に、文字列の前にaを追加する$前に、先行ゼロ(ある場合)を切り取ります。

関連情報