2015-04-21 6 views
0

У меня есть следующее сообщение JSON. Это одно целое сообщение. В одном файле так много сообщений вроде этого. Это json-сообщение было создано из несформированного json-сообщения с использованием jq.jq - извлечение подмножества соответствующих документов из потока

{ 
    "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, я должен получить заголовок и запрос соответствия внутри запроса. Также результат сопоставления внутри сообщения Response. Таким образом, вывод ожидается следующим образом для строки поиска 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 из файла журнала сообщений unformatted json.

sed -n "/<SEARCH_STRING>/ s/.*Service - //p" $1/test.log* | jq . > ~/result.log 

Спасибо, Baskar.S

+1

Что такое '$ 2'? Как этот скрипт 'sed' относится к выходу, который вы нам показали? Почему вы массируете данные с помощью 'sed' перед тем, как передать его' jq'? –

+0

Привет, На самом деле в файле журнала будет много сообщений json. Я использую sed, чтобы отфильтровать соответствующие json-сообщения и удалит ненужный текст из сообщения json, поскольку он добавляется с датой и временем в журналах. – user1578872

+1

Вы уже используете 'jq' для работы с вашими данными, почему бы просто не сделать фильтрацию правильно, а не надеяться, что' sed' может исправить это? –

ответ

2
jq --arg key first_name \ 
    --arg value mike1 \ 
    'select(.message.response.resultsList.result[]?[$key]==$value) | .message' \ 
    <in.json 

... возвращает только содержание сообщения, где список результатов содержит, по меньшей мере, один из first_namemike1.

Смежные вопросы