鉴于您的示例输入,应该执行以下操作:
map(.timestamp |= .[:10])
如果这看起来过于简单,请查看jq's date manipulation builtins;您可能在这里不需要外部工具。
,
如何使用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
。)
,
对于time.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"
}
]
编辑注意:该子项是因为jq默认情况下不支持毫秒。因此,要使用内置的datetime函数,您必须降低毫秒数。其他答案在功能上也是正确的。但是我喜欢我的:-)
本文链接:https://www.f2er.com/3130227.html