使用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"
}
型
4条答案
按热度按时间brccelvz1#
简单地说,
tostring
是你的朋友。假设你的原始JSON对象在一个名为object.json的文件中,而模板在template.json中,你可以写:
字符串
不用说,这个主题有很多变化,例如。
型
或者更紧凑,如果稍微更模糊的话:
型
y4ekin9u2#
我发现@peak在他们自己的回答中的评论非常有用,我想让它自己成为一个答案:
字符串
lvmkulzt3#
JQ为此提供了
tojson
和fromjson
过滤器。关于建议
tostring
的答案请注意:JQ手册中关于tojson
的说明:tojson
内建与tostring
的不同之处在于,tostring
返回未修改的字符串,而tojson
将字符串编码为JSON字符串。所以我认为
tojson
总是正确的,但tostring
只有在你只使用复杂对象时才是正确的。koaltpgm4#
一种变体是使用
tostring
将JSON结构中的给定键字符串化,如下所示:字符串
...其目标路径
b.c
给予:型
(As根据A.H.的回答,如果你也希望字符串是json-string-encoded的,
tojson
可能比tostring
有用)