JQ键的地图名称改为大写,并去掉空格。

问题描述 投票:0回答:1

我在一个bash脚本中工作,我必须用jq自定义一个JSON obj.I有。

[
  {
    "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"
  }
]

但我需要所有的键,没有空格和大写与{#JSON_KEY}加上CONSECUTIVE_FAILURES值和IS_DELETED值与" "。

[
  {
    "{#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"
  }
]

先谢谢你

json bash key jq uppercase
1个回答
1
投票

谢谢@Cyrus,我找到了一个解决方案......我不这是非常 "优雅",但工作

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

对不起@Cyrus我删除您的建议


1
投票

以下内容符合要求,但不需要开销。walk:

map(with_entries( .key |= ( gsub( " "; "_")
                            | ascii_upcase 
                            | "{#\(.)}" )
                  | .value |= tostring))

注意事项:

顾名思义。ascii_upcase 只有大写的ASCII字符。


0
投票

经过几个小时的努力,我不得不改变我的方法......原来的json是。

{
  "dsa": {
    "options": 1,
    "objectGUID": "373f09c9-43ab-489b-9bed-c5357fbe37df",
    "invocationId": "e0e99a5d-9162-4c96-93e1-939976bee141"
  },
  "repsFrom": [
    {
      "NC dn": "DC=company,DC=org",
      "DSA objectGUID": "df9e8712-98c5-42e4-a020-2e5218404e51",
      "last attempt time": "Thu Jun 11 14:27:42 2020 CEST",
      "last attempt message": "was successful",
      "consecutive failures": 1,
      "last success": "Thu Jun 11 14: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": "Thu Jun 11 14:27:43 2020 CEST",
      "last attempt message": "was successful",
      "consecutive failures": 1,
      "last success": "Thu Jun 11 14:27:43 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"
    }
  ],
  "repsTo": [
    {
      "NC dn": "DC=company,DC=org",
      "DSA objectGUID": "86f053eb-36d7-41e4-b944-7bcd9fcb8aaa",
      "last attempt time": "NTTIME(0)",
      "last attempt message": "was successful",
      "consecutive failures": 1,
      "last success": "NTTIME(0)",
      "NTDS DN": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
      "is deleted": false,
      "DSA": "MX084\\SMX0840002-R4"
    },
    {
      "NC dn": "DC=company,DC=org",
      "DSA objectGUID": "6e98ac67-389b-488a-ae3e-abf36d38ba73",
      "last attempt time": "NTTIME(0)",
      "last attempt message": "was successful",
      "consecutive failures": 0,
      "last success": "NTTIME(0)",
      "NTDS DN": "CN=NTDS Settings,CN=SCZ0002,CN=Servers,CN=CZ003,CN=Sites,CN=Configuration,DC=company,DC=org",
      "is deleted": false,
      "DSA": "CZ003\\SCZ0002"
    }
  ],
  "NTDSConnections": [
    {
      "name": "dc6118e7-eca5-4c2c-8248-2e762104e95a",
      "remote DN": "CN=NTDS Settings,CN=SPRLIMA0002-R2,CN=Servers,CN=PR-LIMA,CN=Sites,CN=Configuration,DC=company,DC=org",
      "options": 1,
      "enabled": true,
      "dns name": "sprlima0002-r2.company.org",
      "replicates NC": []
    },
    {
      "name": "9aa7d28f-5b08-42fe-960a-073c8ebfa4fb",
      "remote DN": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
      "options": 1,
      "enabled": true,
      "dns name": "smx0840002-r4.company.org",
      "replicates NC": []
    },
  ]
}

这是输出的 samba-tool drs showrepl --json 我需要的是

  • 所有的键都要用{#JSON_KEY},不含空格和大写。
  • CONSECUTIVE_FAILURES值和IS_DELETED值用""
  • 在一个数组中只看到带有CONSECUTIVE_FAILURES > 0的项目。

像这样

[
    {
      "{#NC_DN}": "DC=company,DC=org",
      "{#DSA}_OBJECTGUID}": "df9e8712-98c5-42e4-a020-2e5218404e51",
      "{#LAST_ATTEMPT_TIME}": "Thu Jun 11 14:27:42 2020 CEST",
      "{#LAST_ATTEMPT_MESSAGE}": "was successful",
      "{#CONSECUTIVE_FAILURES}": "1",
      "{#LAST_SUCCESS}": "Thu Jun 11 14: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}": "Thu Jun 11 14:27:43 2020 CEST",
      "{#LAST_ATTEMPT_MESSAGE}": "was successful",
      "{#CONSECUTIVE_FAILURES}": "1",
      "{#LAST_SUCCESS}": "Thu Jun 11 14:27:43 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"
    },
    {
      "{#NC_DN}": "DC=company,DC=org",
      "{#DSA}_OBJECTGUID}": "86f053eb-36d7-41e4-b944-7bcd9fcb8aaa",
      "{#LAST_ATTEMPT_TIME}": "NTTIME(0)",
      "{#LAST_ATTEMPT_MESSAGE}": "was successful",
      "{#CONSECUTIVE_FAILURES}": "1",
      "{#LAST_SUCCESS}": "NTTIME(0)",
      "{#NTDS_DN}": "CN=NTDS Settings,CN=SMX0840002-R4,CN=Servers,CN=MX084,CN=Sites,CN=Configuration,DC=company,DC=org",
      "{#IS_DELETED}": "false",
      "{#DSA}": "MX084\\SMX0840002-R4"
    }
  ]
}

一个包含所有错误的Sigle数组

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.