用JQ展平嵌套JSON数组
我有一个JSON,格式如下:用JQ展平嵌套JSON数组,json,jq,Json,Jq,我有一个JSON,格式如下: { "@version": "2.7.0", "site": { "@name": "http://api:9999", "@ssl": "false", "alerts": [ { "pluginid": "10094", "desc": "<p>Base64 encoded data was disclosed by the application/web server<
{
"@version": "2.7.0",
"site": {
"@name": "http://api:9999",
"@ssl": "false",
"alerts": [
{
"pluginid": "10094",
"desc": "<p>Base64 encoded data was disclosed by the application/web server<\/p>",
"instances": [
{
"uri": "http://api:9999",
"method": "POST",
"evidence": "DxyPP_YQ6qdWA_Kw_ZLgYilIkXCz93Xs1CeJPvg"
},
{
"uri": "http://api:9999",
"method": "POST",
"evidence": "eyJuYmYiOjE121lMWF1siSG9tZUFwcCJdfQ"
}
],
"count": "37"
}
]
}
}
通过使用以下JQ模式,我能够扁平化内部JSON数组:
.site.alerts[] as $in | $in.instances[] as $h | $in | del(.instances) as $in2 | $h * $in2
这给了我一个非常接近的结果:
{
"uri": "http://api:9999",
"method": "POST",
"evidence": "DxyPP_YQ6qdWA_Kw_ZLgYilIkXCz93Xs1CeJPvg",
"pluginid": "10094",
"desc": "<p>Base64 encoded data was disclosed by the application/web server</p>",
"count": "37"
}
{
"uri": "http://api:9999",
"method": "POST",
"evidence": "eyJuYmYiOjE121lMWF1siSG9tZUFwcCJdfQ",
"pluginid": "10094",
"desc": "<p>Base64 encoded data was disclosed by the application/web server</p>",
"count": "37"
}
{
“uri”:http://api:9999",
“方法”:“发布”,
“证据”:“DxyPP_YQ6qdWA_Kw_ZLgYilIkXCz93Xs1CeJPvg”,
“pluginid”:“10094”,
“desc”:“Base64编码数据由应用程序/web服务器披露”,
“计数”:“37”
}
{
“uri”:http://api:9999",
“方法”:“发布”,
“证据”:“EYJUYMYOJE121LMWF1SISG9TZUFWCCJDFQ”,
“pluginid”:“10094”,
“desc”:“Base64编码数据由应用程序/web服务器披露”,
“计数”:“37”
}
但这不是一个完美的结果。对象不在数组中,不包括父对象中不属于数组的字段(例如.site@name
)
你能帮我改进我创建的JQ模式吗
提前谢谢 这真是一个很好的努力。您的想法是正确的,您已经确保了
.instances[]
数组是平坦的,只需使用该逻辑根据需要重新构造JSON即可
jq '{ "@name" : .site."@name",
"@ssl" : .site."@ssl",
"alerts": [.site.alerts[] as $in | $in.instances[] as $h | $in | del(.instances) as $in2 | $h * $in2 ]}' json
非常感谢您!这正是我所缺少的,我无法理解的:)
jq '{ "@name" : .site."@name",
"@ssl" : .site."@ssl",
"alerts": [.site.alerts[] as $in | $in.instances[] as $h | $in | del(.instances) as $in2 | $h * $in2 ]}' json