jq - jq:传递变量参数以用作过滤器
问题描述
如何将变量参数传递给将用作过滤器的 JQ 程序。由于默认情况下 --arg 将参数作为用引号括起来的字符串传递,因此不能用于应用过滤器。
这是在给定 json 中查找特定路径并向该路径添加静态键值但由于引号问题而不起作用的 JQ 程序。
--argjson name '{ "pattern": "XYZ"}' 'def p: "." + (paths | select(.[-1] == "p-enum") | .[0:-1] | join(".")) ; .|p += $name' sample.json
这是示例 json
{
"type": "object",
"description": "Contains information.",
"properties": {
"type": {
"description": "Type.",
"type": "string",
"p-enum": [
{
"value": "IND",
"description": "Ind."
},
{
"value": "PROP",
"description": "Prop."
}
]
}
}
}
解决方案
根据我如何解释您在其他问题中使用 jq 的方式,这取决于您的过滤器的复杂程度。任何要被解释的论点jq
都不是你应该接近它的方式。这相当于 usingeval()
并且不仅不受支持,而且不是解决此问题的好方法。
如果您只是访问输入的属性,则有几种方法可以使用简单索引或getpath/1
用于嵌套路径。
# indexing
# { "properties": ... }
$ jq --arg p 'properties' '.[$p]' input.json
# using getpath
# { "foo": { "bar": ... } }
$ jq --argjson path '["foo","bar"]' 'getpath($path)' input.json
推荐阅读
- javafx - JavaFX 中标签之间的空间
- html - 底部的页脚使用位置:固定但保持间距
- r - 集群包上的 ggfortify::autoplot 错误:“错误:(从警告转换)‘集群’部分匹配到‘集群’”
- r - 如何向 mapdist 函数添加可选参数?
- javafx - JavaFX Combobox 显示未选中的其他条目
- c++ - 为什么在没有赋值运算符的情况下调用转换构造函数?
- javascript - Axios 请求与老式表单提交请求相同
- python - 为什么表达式 (12 + 5) / 10 * 10 在 Pycharm (Python 3.6.7) 和 CodingBat (Python 3.x) 中评估不同的结果?
- python-3.x - 实时输出子流程 aws sync
- android-studio - 如何在 Android Studio 中启用代码覆盖率运行器的下拉菜单?