[英]Modify a key-value in a json using jq with external command
給定一個json
文件,我如何使用jq
和外部命令來修改一個值?
就我而言,我想將完整的時間戳轉換為YYYY-MM-DD
格式(例如,使用命令: date --date="2019-01-02T10:00:00.000Z" "+%Y-%m-%d"
)
原裝JSON
[{"timestamp": "2019-01-01T10:00:00.000Z"}, {"timestamp": "2019-01-02T10:00:00.000Z"}, {"timestamp": "2019-01-02T10:00:00.000Z"}]
全新 JSON
[{"timestamp": "2019-01-01"}, {"timestamp": "2019-01-02"}, {"timestamp": "2019-01-02"}]
如何使用 jq 和外部命令來修改值
它可以做到,雖然它並不漂亮:
jq --argjson update "$(jq -r '.[] | .timestamp' input.json |
while read r ; do
date --date="$r" "+%Y-%m-%d"
done |
jq -nR [inputs] )" '
reduce range(0;$update|length) as $i (.;
.[$i].timestamp = $update[$i])
' input.json
(在某些環境中,可能需要調用gdate
而不是date
。)
對於時間。json =
[{"timestamp": "2019-01-01T10:00:00.000Z"}, {"timestamp": "2019-01-02T10:00:00.000Z"}, {"timestamp": "2019-01-02T10:00:00.000Z"}]
使用
jq '[.[] | .timestamp |= (sub("\\.[0-9]+Z$"; "Z") | fromdate | strftime("%Y-%m-%d"))]' time.json
生產
[
{
"timestamp": "2019-01-01"
},
{
"timestamp": "2019-01-02"
},
{
"timestamp": "2019-01-02"
}
]
編輯說明: sub 是因為 jq 默認不支持毫秒。 因此,為了使用內置的日期時間函數,您必須刪除毫秒。 其他答案在功能上也是正確的。 但我喜歡我的:-)
使用正則表達式從值中刪除 substring T10:00:00.000Z
:
jq '.[].timestamp |= (sub("\\T.*";"") )' file
Output:
[ { "timestamp": "2019-01-01" }, { "timestamp": "2019-01-02" }, { "timestamp": "2019-01-02" } ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.