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