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

如何用PowerShell将jq输出写入JSON文件以删除qlist属性?

PowerShell中用jq原地修改JSON文件的解决方案

直接在PowerShell中执行jq 'del(.qlist)' $file > $file会清空原文件,原因是PowerShell会先打开目标文件并清空内容,再执行jq命令读取文件,此时jq读到的是空文件,最终输出空内容到文件。以下是两种可行的解决方法:

方法一:通过临时文件中转(兼容所有jq版本)

先将jq处理后的内容写入临时文件,再替换原文件,避免直接覆盖导致的问题:

# 遍历目录下所有JSON文件
Get-ChildItem -Filter *.json | ForEach-Object {
    # 生成临时文件路径(和原文件同目录,后缀加.tmp)
    $tempFile = Join-Path $_.DirectoryName "$($_.BaseName).tmp.json"
    # 用jq处理内容并写入临时文件,指定utf8编码避免乱码
    jq 'del(.qlist)' $_.FullName | Out-File -FilePath $tempFile -Encoding utf8
    # 强制将临时文件替换为原文件
    Move-Item -Path $tempFile -Destination $_.FullName -Force
}

注意:指定-Encoding utf8是为了保持JSON文件的默认编码,避免PowerShell默认的Unicode编码导致文件格式异常。

方法二:使用jq的原地修改选项(jq 1.6+版本可用)

jq 1.6及以上版本支持--in-place(简写-i)选项,直接原地修改文件,无需手动处理临时文件:

Get-ChildItem -Filter *.json | ForEach-Object {
    jq -i 'del(.qlist)' $_.FullName
}

这个方法更简洁,是优先推荐的方案,前提是你的jq版本满足要求(可通过jq --version查看版本)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29