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