You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq替换JSON中LastModified字段内容并转换为epoch时间戳?

解决JSON中LastModified字段的字符串替换问题

我完全懂你的困扰——用sed -i改JSON简直是踩雷,一不小心就会改到其他无关字段,而之前尝试的jq命令没找对路子,所以没生效。咱们直接用jq的字符串处理能力,精准搞定这个需求就行。

正确的jq命令

你可以用这条命令来处理你的JSON文件:

cat list | jq '.[] |= (.LastModified |= (gsub("-"; "/") | sub("T.*"; "")))'

如果需要直接修改原文件(类似sed -i的效果),可以加上-i参数:

jq -i '.[] |= (.LastModified |= (gsub("-"; "/") | sub("T.*"; "")))' list

命令拆解

咱们一步步看每个部分的作用:

  • .[]:遍历JSON数组中的每一个元素
  • |=:jq的更新操作符,意思是把后面的处理结果重新赋值给前面的元素/字段
  • .LastModified |= gsub("-"; "/"):把LastModified字段里所有的短横线-替换成斜杠/(gsub是全局替换,会换掉所有匹配的字符)
  • sub("T.*"; ""):用正则匹配从T开始到字符串结尾的所有内容,替换成空字符串——这样就一次性去掉了T和后面的.000Z

示例效果

假设你的输入JSON是这样的:

[
  {"Filename": "report.pdf", "LastModified": "2024-05-20T14:30:00.000Z"},
  {"Filename": "data.csv", "LastModified": "2024-06-10T09:15:45.000Z"}
]

处理后会变成:

[
  {"Filename": "report.pdf", "LastModified": "2024/05/20"},
  {"Filename": "data.csv", "LastModified": "2024/06/10"}
]

为什么之前的命令没生效?

你之前用的select (.LastModified == "-")是只筛选出LastModified字段值等于-的元素,这和你要对所有元素的LastModified做替换的需求不符,所以才没效果。去掉不必要的select,直接用更新操作符就能覆盖所有元素啦。

内容的提问来源于stack exchange,提问作者Ryan Loeffler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:15:55