このようなデータがあります。
{
"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を追加する$
前に、先行ゼロ(ある場合)を切り取ります。