如何根据变量在嵌套中添加标记,同时保留json的其余部分



我是jq的新手,我已经学会了自己做大多数事情,但我正在为这件事努力。看看下面的json

JSON:

{
"importType": "Upsert",
"immediateDeployment": false,
"isIgnoreNulls": false,
"isOverwriteNullsOnly": false,
"isPreferredandSync": false,
"outputLayout": {
"fields": [
{
"name": "TEMP_KEY",
"type": "String",
"length": "2000",
"displayName": "TEMP_KEY"
},
{
"name": "LoadSeqNum",
"type": "String",
"length": "2000",
"displayName": "LoadSeqNum"
}
]
}
}

我要做的是在.outputLayout.fields[]内部。我想创建一个名为"isIdentifier"的新对,如果.outputLayout.fields[].name是LoadSeqNum,则为true,如果不是,则为false,但我需要保持json的其余部分原样。所以目标应该如下所示:

目标:

{
"importType": "Upsert",
"immediateDeployment": false,
"isIgnoreNulls": false,
"isOverwriteNullsOnly": false,
"isPreferredandSync": false,
"outputLayout": {
"fields": [
{
"name": "TEMP_KEY",
"type": "String",
"length": "2000",
"displayName": "TEMP_KEY"
"isIdentifier": false
},
{
"name": "LoadSeqNum",
"type": "String",
"length": "2000",
"displayName": "LoadSeqNum"
"isIdentifier": true
}
]
}
}

我试过这个:

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") )

最新更新