我有以下JSON消息。这是一条完整的消息。在一个文件中有这么多的消息。此json消息是使用jq。
从未格式化的json消息生成的{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike",
"last_name": "mat"
},
{
"first_name": "mike",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
我想对此进行一些过滤。例如,当我搜索first_name,mike1时,我应该在请求中获取头部和匹配请求。响应消息中的匹配结果也是如此。因此,搜索字符串mike1的输出预期如下。
{
"header": {
"user": "baskar"
},
"requests": [
{
"first_name": "mike1",
"last_name": "mat"
}
],
"check": [
"Y"
]
}
{
"header": {
"user": "baskar"
},
"message": {
"header": {
"user": "baskar"
},
"response": {
"resultsList": {
"result": [
{
"first_name": "mike1",
"last_name": "mat"
}
]
},
"errorMsg": null
}
}
}
基本上,我想在请求数组中过滤掉不匹配的请求,并在结果数组中过滤掉不匹配的结果。
目前,我使用以下脚本从未格式化的json消息日志文件中获取格式化的json消息。
sed -n "/<SEARCH_STRING>/ s/.*Service - //p" $1/test.log* | jq . > ~/result.log
谢谢, Baskar.S
答案 0 :(得分:2)
jq --arg key first_name \
--arg value mike1 \
'select(.message.response.resultsList.result[]?[$key]==$value) | .message' \
<in.json
...仅返回结果列表至少包含first_name
mike1
的消息内容。