使用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\\\"]}\"}"这样,我就可以将该字符串插入到另一个JSON对象的text字段下,以创建以下内容。
{
"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"
}发布于 2020-04-29 09:33:00
简而言之,tostring是你的朋友。
假设您的原始JSON对象位于一个名为object.json的文件中,并且模板位于template.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发布于 2021-07-17 17:44:20
我发现@peak在他们自己的答案中的评论非常有用,我想让它自己成为一个答案:
$ echo '{ "foo": [ "bar", "baz" ] }' | jq tostring
"{\"foo\":[\"bar\",\"baz\"]}"https://stackoverflow.com/questions/61492210
复制相似问题