jq 替换 json 中的部分值

jq replace part of value in json

我需要替换 json 输出中的部分值。我可以使用 sed -i 轻松地做到这一点,但是它也会替换我不想要的文件的其他部分,除非我遗漏了什么。输出是

{
  "LastModified": "2018-03-07T17:24:33.000Z",
  "Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}

我需要将 LastModified 值上的破折号“-”替换为斜杠,然后删除一些东西,例如“T”和“.000Z”,这样我最终可以将该时间戳转换为纪元。

我试过使用 cat list | jq -r '.[] | select (.LastModified == "-") .LastModified = "/"'|= 运算符,但我在网络上的其他任何地方都找不到这已经完成。

使用 jqsub()fromdate() 函数:

jq '.LastModified |= (sub("\.000Z";"Z") | fromdate)' input.json

输出:

{
  "LastModified": 1520443473,
  "Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}

如果您的平台支持,您可以使用日期函数解析出来,然后重新格式化日期字符串。

.LastModified |= (sub("\.000Z$"; "Z") | fromdateiso8601 | strftime("%Y/%m/%d %H:%M:%S"))

否则,您可以使用常用的字符串操作技术。

.LastModified |= "\(.[:10] | sub("-"; "/"; "g")) \(.[11:19])"

两个结果的结果:

{
  "LastModified": "2018/03/07 17:24:33",
  "Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}