如何将变量参数传递给将用作过滤器的JQ程序。由于默认情况下--arg将参数作为带引号的字符串传递,因此不能将其应用于过滤器。
这是JQ程序,它在给定的json中查找特定路径,并向该路径添加静态键值,但由于引号问题而无法使用。
--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."
}
]
}
}
}
答案 0 :(得分:1)
根据我对您在other question中使用jq的方式的理解,这取决于过滤器的复杂程度。 jq
解释的任何参数都不是您应采用的方式。这等效于使用eval()
,不仅不受支持,而且也不是解决此问题的好方法。
如果只是访问输入的属性,则可以使用几种方法使用简单索引或对嵌套路径使用getpath/1
。
# indexing
# { "properties": ... }
$ jq --arg p 'properties' '.[$p]' input.json
# using getpath
# { "foo": { "bar": ... } }
$ jq --argjson path '["foo","bar"]' 'getpath($path)' input.json