이런 데이터가 있어요
{
"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"
그러나 여기에는 몇 가지 이상한 상황이 있으며 이는 중요할 수도 있고 중요하지 않을 수도 있습니다. 금액이 0으로 끝나면(예: 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를 추가하기 $
전에 선행 0(있는 경우)을 잘라냅니다 .