jq:传递变量参数用作过滤器

时间:2018-09-04 21:35:14

标签: jq

如何将变量参数传递给将用作过滤器的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." } ] } } }

1 个答案:

答案 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