将 json 中的时间戳对象转换为字符串形式的时间戳
Converting timestamp object in json to timestamp as a string
我有一个从 Mongodb 导出的 json 。它以不同的格式显示时间戳
"timestamp":{"$date":"2020-08-01T00:00:00Z"}}
。我想将此时间戳对象转换为 "timestamp":"2020-08-01T00:00:00Z"
.
之类的字符串
我已经像 s/\{\"[$]date\":\"(\S{20})\"}/""/g;
一样使用 sed 完成了此操作。但是,如果将毫秒添加到时间中,时间戳的长度可能会有所不同。例如:"timestamp":{"$date":"2020-08-01T00:00:00.123Z"}}
将转换为 s/\{\"[$]date\":\"(\S{23})\"}/""/g;
,因为时间戳字符串的长度为 23 个字符。我想将其转换为单个转换步骤,其中字符串的任何长度都可以。
我也可以使用 jq 执行此操作,但需要读取每一行,将值存储在变量中并使用 awk 更改值。与 sed 相比,这将非常耗时。所以寻找不同的解决方案。
一个好的答案将不胜感激。谢谢
考虑:
walk( if type == "object" and has("$date")
then .["$date"] else . end )
这有丢失数据的风险,因此您可能需要考虑类似的替代方案,例如更强的前提条件,或使用预期键名的前提条件。或者,如果“日期”对象与预期不符,您可能希望引发错误。
我搞定了。这个答案是为那些正在寻找类似解决方案的人准备的。
cat test.json | jq ' .location.timestamp = .location.timestamp."$date"' | sponge test.json
我不知道怎么用海绵,海绵太棒了!
我有一个从 Mongodb 导出的 json 。它以不同的格式显示时间戳
"timestamp":{"$date":"2020-08-01T00:00:00Z"}}
。我想将此时间戳对象转换为 "timestamp":"2020-08-01T00:00:00Z"
.
我已经像 s/\{\"[$]date\":\"(\S{20})\"}/""/g;
一样使用 sed 完成了此操作。但是,如果将毫秒添加到时间中,时间戳的长度可能会有所不同。例如:"timestamp":{"$date":"2020-08-01T00:00:00.123Z"}}
将转换为 s/\{\"[$]date\":\"(\S{23})\"}/""/g;
,因为时间戳字符串的长度为 23 个字符。我想将其转换为单个转换步骤,其中字符串的任何长度都可以。
我也可以使用 jq 执行此操作,但需要读取每一行,将值存储在变量中并使用 awk 更改值。与 sed 相比,这将非常耗时。所以寻找不同的解决方案。
一个好的答案将不胜感激。谢谢
考虑:
walk( if type == "object" and has("$date")
then .["$date"] else . end )
这有丢失数据的风险,因此您可能需要考虑类似的替代方案,例如更强的前提条件,或使用预期键名的前提条件。或者,如果“日期”对象与预期不符,您可能希望引发错误。
我搞定了。这个答案是为那些正在寻找类似解决方案的人准备的。
cat test.json | jq ' .location.timestamp = .location.timestamp."$date"' | sponge test.json
我不知道怎么用海绵,海绵太棒了!