jq使用-L参数执行外部脚本无法获取对应键值对如何解决
问题原因
-L是jq的模块搜索路径指定参数,不是用于直接加载过滤器文本文件的参数。你当前执行命令时并没有调用到json2csv中定义的过滤器,jq默认返回完整输入内容,因此输出了全部JSON结构。
两种解决方式
方式1:无需修改json2csv文件,调整执行参数(更简便)
你当前json2csv里的.["a"]过滤器本身是正确的,只要把调用参数从-L换成-f即可,-f才是指定加载过滤器文件的参数:
cat sample2.json | jq -f json2csv
执行后会直接输出预期的86,注意匹配你实际的JSON文件名(你示例中文件名为sample2.json,原命令写的sample.json属于笔误)。
方式2:修改json2csv文件适配-L模块加载模式
如果你需要使用-L的模块管理机制,按以下步骤调整:
- 先将
json2csv文件重命名为json2csv.jq(jq模块要求后缀为.jq) - 修改
json2csv.jq内容,将过滤器封装为可导出的模块函数:
def get_a: .["a"];
- 执行命令时导入模块并调用对应函数,
-L后面跟模块文件所在的目录(此处示例为当前目录.):
cat sample2.json | jq -L . 'import "json2csv" as m; m::get_a'
内容的提问来源于stack exchange,提问作者user3768495
相关产品推荐
相关产品推荐

