我正在尝试从json文件中删除一个特定的键/值对。
在本例中,我的json文件是 params.json
[
{
"ParameterKey": "RTSMMinSize",
"ParameterValue": "1"
},
{
"ParameterKey": "RTSMReplicateDB",
"ParameterValue": "false"
},
{
"ParameterKey": "RTSMSnapshotID",
"ParameterValue": "snapID"
},
{
"ParameterKey": "RTSMEMAIL",
"ParameterValue": ""
}
]
Run Code Online (Sandbox Code Playgroud)
我想在RTSMSnapshotID我的bash脚本中完全删除键值对。该文件应如下所示:
[
{
"ParameterKey": "RTSMMinSize",
"ParameterValue": "1"
},
{
"ParameterKey": "RTSMReplicateDB",
"ParameterValue": "false"
},
{
"ParameterKey": "RTSMEMAIL",
"ParameterValue": ""
}
]
Run Code Online (Sandbox Code Playgroud)
我以为这很简单
jq 'del(.RTSMSnapshotID)' params.json
Run Code Online (Sandbox Code Playgroud)
但我越来越
jq: error (at <filename>): Cannot index array with string "RTSMSnapshotID"
Run Code Online (Sandbox Code Playgroud)
显然,我不明白删除的工作原理。有什么帮助吗?
del(.foo)期望有一个名为的键的顶级词典foo。这里不是这种情况。取而代之的是,您有一个ParameterKey包含一系列值的顶级列表,并且只想删除其中的一对值。
jq '[ .[] | select(.ParameterKey != "RTSMSnapshotID") ]'
Run Code Online (Sandbox Code Playgroud)
...要么...
jq 'map(select(.ParameterKey != "RTSMSnapshotID"))'
Run Code Online (Sandbox Code Playgroud)