Как преобразовать в строку JSON, используя JQ - PullRequest
0 голосов
/ 29 апреля 2020

Используя JQ, я хотел бы взять сложный объект JSON, который включает в себя JSON, встроенный в виде строк, и затем превратить все это в допустимую строку, которую я могу легко встроить в другие JSON объекты.

Например, допустим, у меня есть json объект:

{
  "region": "CA",
  "waf_rule_tags": "{\"RULEID:942100\":[\"application-multi\",\"language-multi\",\"platform-multi\",\"attack-sqli\",\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\",\"WASCTC/WASC-19\",\"OWASP_TOP_10/A1\",\"OWASP_AppSensor/CIE1\",\"PCI/6.5.2\"]}"
}

Мне нужно превратить все это в следующую строку:

"{\"region\": \"CA\",\"waf_rule_tags\": \"{\\\"RULEID:942100\\\":[\\\"application-multi\\\",\\\"language-multi\\\",\\\"platform-multi\\\",\\\"attack-sqli\\\",\\\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\\\",\\\"WASCTC/WASC-19\\\",\\\"OWASP_TOP_10/A1\\\",\\\"OWASP_AppSensor/CIE1\\\",\\\"PCI/6.5.2\\\"]}\"}"

Таким образом Я могу взять эту строку и вставить ее точно в поле text другого объекта JSON, чтобы создать следующее.

{
      "title": "12345-accesslogs",
      "text": "{\"region\": \"CA\",\"waf_rule_tags\": \"{\\\"RULEID:942100\\\":[\\\"application-multi\\\",\\\"language-multi\\\",\\\"platform-multi\\\",\\\"attack-sqli\\\",\\\"OWASP_CRS/WEB_ATTACK/SQL_INJECTION\\\",\\\"WASCTC/WASC-19\\\",\\\"OWASP_TOP_10/A1\\\",\\\"OWASP_AppSensor/CIE1\\\",\\\"PCI/6.5.2\\\"]}\"}",
      "priority": "normal",
      "tags": ["environment:test"],
      "alert_type": "info"
}

1 Ответ

1 голос
/ 29 апреля 2020

Вкратце, tostring - ваш друг.

Предполагается, что ваш исходный объект JSON находится в файле с именем object. json, а шаблон находится в шаблоне. json, Вы можете написать:

jq --argfile object object.json '.text = ($object | tostring)' template.json

Излишне говорить, что существует множество вариаций на эту тему, например,

jq -n 'input | input + {text: tostring}' \
   object.json template.json

или более компактно, если немного более неясно:

jq 'input + {text: tostring}' object.json template.json
...