【问题标题】:Refactoring jq with a variable key name?用变量键名重构 jq?
【发布时间】:2017-05-31 20:29:19
【问题描述】:
有没有办法将jq 重构为函数?
重构之前:
jq ' .them ."keyName" ' ./some.json
重构后:
def getThese(x): .them .$x;
在~/.jq
然后用...调用它
jq ' getThese("keyName") as $i | $i ' ./some.json
上面的重构似乎不起作用(有办法吗?)
【问题讨论】:
标签:
function
key
refactoring
jq
【解决方案1】:
如果 y 是变量,则缩写“.x.y”将不起作用。使用语法 '.x | .[ y ]' 代替。
'E as $i|在这种情况下,$i' 可以写成 'E'。
您的定义应该是:
def getThese(x): .them | .[x];
或具有不同的语义(并且需要足够新的 jq 版本):
def getThese($x): .them | .[$x];
- 另一种方法是将
getThem 定义为:
def getThem(f): .them | f;
这将允许您写:getThem(.keyName) 用于具有普通名称的键。