JQ key map name to uppercase and remove space

Des*_*oPR 5 bash json key uppercase jq

i'm working in a bash script i have to customize one JSON obj with jq . I have:

[
  {
    "NC dn": "DC=company,DC=org",
    "DSA objectGUID": "df9e8712-98c5-42e4-a020-2e5218404e51",
    "last attempt time": "Wed Jun 10 15:27:42 2020 CEST",
    "last attempt message": "was successful",
    "consecutive failures": 0,
    "last success": "Wed Jun 10 15:27:42 2020 CEST",
    "NTDS DN": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=company,DC=org",
    "is deleted": false,
    "DSA": "TENGIZ\\STEN0002-R2"
  },
  {
    "NC dn": "DC=company,DC=org",
    "DSA objectGUID": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
    "last attempt time": "Wed Jun 10 15:27:42 2020 CEST",
    "last attempt message": "was successful",
    "consecutive failures": 0,
    "last success": "Wed Jun 10 15:27:42 2020 CEST",
    "NTDS DN": "CN=NTDS Settings,CN=SCGPN0002-R2,CN=Servers,CN=POINTE-NOIRE,CN=Sites,CN=Configuration,DC=company,DC=org",
    "is deleted": false,
    "DSA": "POINTE-NOIRE\\SCGPN0002-R2"
  }
]
Run Code Online (Sandbox Code Playgroud)

but i need all key with out space and uppercase with {#JSON_KEY} plus CONSECUTIVE_FAILURES value and IS_DELETED value with " " :

[
  {
    "{#NC_DN}": "DC=domain,DC=org",
    "{#DSA_OBJECTGUID}": "df9e8712-98c5-42e4-a020-2e5218404e51",
    "{#LAST_ATTEMPT_TIME}": "Wed Jun 10 15:27:42 2020 CEST",
    "{#LAST_ATTEMPT_MESSAGE}": "was successful",
    "{#CONSECUTIVE_FAILURES}": "0",
    "{#LAST_SUCCESS}": "Wed Jun 10 15:27:42 2020 CEST",
    "{#NTDS_DN}": "CN=NTDS Settings,CN=STEN0002-R2,CN=Servers,CN=TENGIZ,CN=Sites,CN=Configuration,DC=domain,DC=org",
    "{#IS_DELETED}": "false",
    "{#DSA}": "TENGIZ\\STEN0002-R2"
  },
  {
    "{#NC_DN}": "DC=domain,DC=org",
    "{#DSA_OBJECTGUID}": "d5d168fd-5fc3-4afc-9acc-32c7f10d14a2",
    "{#LAST_ATTEMPT_TIME}": "Wed Jun 10 15:27:42 2020 CEST",
    "{#LAST_ATTEMPT_MESSAGE}": "was successful",
    "{#CONSECUTIVE_FAILURES}": "0",
    "{#LAST_SUCCESS}": "Wed Jun 10 15:27:42 2020 CEST",
    "{#NTDS_DN}": "CN=NTDS Settings,CN=SCGPN0002,CN=Servers,CN=NOIRE,CN=Sites,CN=Configuration,DC=domain,DC=org",
    "{#IS_DELETED}": "false",
    "{#DSA}": "POINTE-NOIRE\\SCGPN0002-R2"
  }
]
Run Code Online (Sandbox Code Playgroud)

Thanks in advance

pea*_*eak 11

以下内容满足要求,且没有 的开销walk

map(with_entries( .key |= ( gsub( " "; "_")
                            | ascii_upcase 
                            | "{#\(.)}" )
                  | .value |= tostring))
Run Code Online (Sandbox Code Playgroud)

警告

顾名思义,ascii_upcase仅包含大写 ASCII 字符。


Des*_*oPR 2

谢谢@Cyrus,我找到了一个解决方案......我不认为这是非常“优雅”但有效!

cat myjsonfile.txt | jq 'walk( if type == "object" then with_entries( .key |= ( gsub( " "; "_") | ascii_upcase | "{#" + . +"}" )) else . end )'
Run Code Online (Sandbox Code Playgroud)

抱歉@Cyrus,我删除你的建议