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 = "/"'
和 |=
运算符,但我在网络上的其他任何地方都找不到这已经完成。
使用 jq 的 sub()
和 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"
}
我需要替换 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 = "/"'
和 |=
运算符,但我在网络上的其他任何地方都找不到这已经完成。
使用 jq 的 sub()
和 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"
}