Jq “中的可选元素”;“减少投入”;条款
我正在研究从前面的一个问题中得到的结果 以下是我目前拥有的:Jq “中的可选元素”;“减少投入”;条款,jq,Jq,我正在研究从前面的一个问题中得到的结果 以下是我目前拥有的: function data { cat <<EOF Security:ClientId=123456 Security:ClientSecret=abcdefg AppSettings:Environment=Dev AnotherCustomSetting=SomethingElse EOF } data | jq -nR ' def parse: capture("(?:(?<group>[^
function data {
cat <<EOF
Security:ClientId=123456
Security:ClientSecret=abcdefg
AppSettings:Environment=Dev
AnotherCustomSetting=SomethingElse
EOF
}
data | jq -nR '
def parse: capture("(?:(?<group>[^:=]*):)?(?<property>[^=]*)=(?<value>.*)");
reduce inputs as $line ({};
($line | parse) as $envVar
| if .[$envVar.group] != null then .[$envVar.group][$envVar.property] = ($envVar.value) else .[$envVar.property] = ($envVar.value) end)
'
在我的上一个问题中,我没有指出我需要根级别的属性(AnotherCustomSetting
)
为了使根级属性正常工作,我修改了RegEx,使其具有一个可选的组,但是原始答案的reduce inputs
没有预料到组
为空(并且在设置时出现了空错误)。因此我尝试在reduceinputs
部分中放入if
语句。不幸的是,它失败了,出现以下错误:
jq:错误(位于:4):无法为空对象编制索引
是否可以像我正在尝试的那样,在减少输入
部分执行if-then-else
?如果是这样的话,是如何做到的?这应该可以做到:
def parse: capture("(?<x>[^:=]*)(:(?<y>[^:=]*))?=(?<value>.*)");
reduce inputs as $line ({};
($line | parse) as $p
| if $p.y then .[$p.x][$p.y] = $p.value
else .[$p.x] = $p.value end )
def parse:capture((?[^:=]*)(:(?[^:=]*))?=(?*);
将输入减少为$行({});
($line | parse)作为$p
|如果为$p.y,则为[$p.x][$p.y]=$p.value
else。[$p.x]=$p.value end)
当然,这可以进一步证实…再次感谢您!非常感谢你抽出时间回答我的问题。
def parse: capture("(?<x>[^:=]*)(:(?<y>[^:=]*))?=(?<value>.*)");
reduce inputs as $line ({};
($line | parse) as $p
| if $p.y then .[$p.x][$p.y] = $p.value
else .[$p.x] = $p.value end )