【发布时间】:2020-10-24 06:29:20
【问题描述】:
我有一个从 Mongodb 导出的 json。它以不同的格式显示时间戳
"timestamp":{"$date":"2020-08-01T00:00:00Z"}} 。我想将此时间戳对象转换为类似 "timestamp":"2020-08-01T00:00:00Z" 的字符串。
我已经使用像s/\{\"[$]date\":\"(\S{20})\"}/"\1"/g; 这样的 sed 完成了这项工作。但是,如果将毫秒添加到时间,则时间戳的长度可能会有所不同。例如:"timestamp":{"$date":"2020-08-01T00:00:00.123Z"}} 将转换为 s/\{\"[$]date\":\"(\S{23})\"}/"\1"/g;,因为时间戳字符串的长度为 23 个字符。我想将其转换为单个转换步骤,其中字符串的任何长度都可以。
我也可以用 jq 做到这一点,但这需要读取每一行,将值存储在变量中并使用 awk 来更改值。与 sed 相比,这将是耗时的。所以寻找不同的解决方案。
非常感谢一个好的答案。谢谢
【问题讨论】:
-
使用
jq解析/修改 JSON 数据。 -
jq 不进行就地编辑
-
jq ... INPUT | sponge INPUT -
普通的旧
jq ... INPUT > tmp && mv tmp INPUT有什么问题? -
@EdMorton -- 并发? (特别是如果您的字面意思是“tmp”。)
标签: json mongodb awk jq datetime-format