使用 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\"]}"
}
Run Code Online (Sandbox Code Playgroud)
我需要将其全部转换为以下字符串:
"{\"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\\\"]}\"}"
Run Code Online (Sandbox Code Playgroud)
这样我就可以获取该字符串并将其准确插入到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"
}
Run Code Online (Sandbox Code Playgroud)
pea*_*eak 14
简而言之,tostring
就是你的朋友。
假设您的原始 JSON 对象位于名为 object.json 的文件中,并且模板位于 template.json 中,您可以编写:
jq --argfile object object.json '.text = ($object | tostring)' template.json
Run Code Online (Sandbox Code Playgroud)
不用说,这个主题有很多变体,例如
jq -n 'input | input + {text: tostring}' \
object.json template.json
Run Code Online (Sandbox Code Playgroud)
或者如果稍微更晦涩的话更紧凑:
jq 'input + {text: tostring}' object.json template.json
Run Code Online (Sandbox Code Playgroud)
我发现 @peak 在他们自己的答案中的评论非常有用,我想将其作为自己的答案:
$ echo '{ "foo": [ "bar", "baz" ] }' | jq -r tostring
{\"foo\":[\"bar\",\"baz\"]}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14166 次 |
最近记录: |