如何用jq命令批量处理GUID命名JSON文件并合并为清单文件
用jq批量处理JSON文件并合并为数组
没问题,用jq一行命令就能搞定你的需求!这里分两种场景给你解决方案,适配不同的文件命名情况:
基础版本(文件名无空格/特殊字符)
如果你的.json文件名都是纯GUID格式、没有空格或特殊字符,直接用这条命令:
jq -n '[inputs | .CaseId = input_filename | .CaseId |= rtrimstr(".json")]' *.json > combined.json
命令拆解:
-n:让jq从空状态启动,确保我们能手动构建最终的数组结构[inputs ...]:把所有输入的JSON对象收集到一个大数组中.CaseId = input_filename:为每个JSON对象添加CaseId字段,值为当前处理的完整文件名(比如43d47f66-5a0a-4b86-88d6-1f1f893098d2.json).CaseId |= rtrimstr(".json"):去掉CaseId值末尾的.json后缀,得到纯GUID字符串*.json:匹配当前目录下所有.json文件> combined.json:将最终结果输出到combined.json文件中
稳健版本(文件名含空格/特殊字符)
如果文件名可能包含空格或特殊字符,用find配合jq更稳妥:
find . -maxdepth 1 -type f -name "*.json" -exec jq -n --argfile f {} '$f | .CaseId = ($f|input_filename|rtrimstr(".json"))' \; | jq -s . > combined.json
效果验证
假设你有一个43d47f66-5a0a-4b86-88d6-1f1f893098d2.json文件,内容为:
{"Active": true, "CaseType": "CaseType", "CustomerGroup": ["Core", "Extended"]}
处理后,combined.json里对应的元素会是:
{ "Active": true, "CaseType": "CaseType", "CustomerGroup": ["Core", "Extended"], "CaseId": "43d47f66-5a0a-4b86-88d6-1f1f893098d2" }
所有文件的处理结果会被包裹在一个顶层数组里,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

