如何根据变量在嵌套中添加标记,同时保留json的其余部分
我是jq的新手,我已经学会了自己做大多数事情,但这次我要用键盘敲我的头。看看下面的json JSON: 我尝试在.outputLayout.fields[]内部创建一个名为“isIdentifier”的新对,如果.outputLayout.fields[].name为LoadSeqNum,则为true,如果不是,则为false,但我需要保持json的其余部分不变。因此,目标应如下所示: 目标: 我试过这个:如何根据变量在嵌套中添加标记,同时保留json的其余部分,json,jq,Json,Jq,我是jq的新手,我已经学会了自己做大多数事情,但这次我要用键盘敲我的头。看看下面的json JSON: 我尝试在.outputLayout.fields[]内部创建一个名为“isIdentifier”的新对,如果.outputLayout.fields[].name为LoadSeqNum,则为true,如果不是,则为false,但我需要保持json的其余部分不变。因此,目标应如下所示: 目标: 我试过这个: jq '.outputLayout.fields[] | . + {"isIdentif
jq '.outputLayout.fields[] | . + {"isIdentifier": (if (.name)=="LoadSeqNum" then true else false end)}'
但我当然错过了所有更高层次的东西。当我尝试这样做时:
.outputLayout.fields[].isIdentifier=(if (.outputLayout.fields[].name)=="LoadSeqNum" then true else false end)
我两次得到整件事,一次是真的,另一次是假的。我理解它为什么这么做,但我很难弄清楚什么是可行的。有什么帮助或指向正确的方向吗
.outputLayout.fields[] |= (.isIdentifier = (.displayName == "LoadSeqNum") )
或者同等地,但可能不那么神秘:
.outputLayout.fields |= map( .isIdentifier = (.displayName == "LoadSeqNum") )
谢谢你,这很好用。除了|=操作符,我了解那里发生的大部分事情。我读过这本手册,但很难理解。
.foo |=expr
就像作业.foo=(.foo | expr)
,但可以使用比简单的“.foo”更复杂的路径表达式。
.outputLayout.fields[] |= (.isIdentifier = (.displayName == "LoadSeqNum") )
.outputLayout.fields |= map( .isIdentifier = (.displayName == "LoadSeqNum") )