У меня есть следующая структура JSON с несколькими записями, полученная в ответ от веб-службы:
[
{
"model": "analytics.request",
"pk": 89,
"fields": {
"intent": "GetUserAccountInformation",
"sub_intent": "",
"request_text": "what is my balance",
"response_text": "You have $111,111.11 and owe $111,111. Shall I break that down?",
"session_id": "1v69yiptamgse1niap51zr2o9x154169081480766b2d6b7-d3ce-4166-9292-c4669a3dfc14",
"user_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I",
"device_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ",
"device_type": "alexa",
"device_model": "NA",
"device_os": "alexa",
"elapsed_time": 23286,
"region": "NA",
"latitude": 0,
"longitude": 0,
"date": "2018-11-08T15:31:48.757+0000",
"ext_session_id": "",
"ext_user_id": "",
"score": 1,
"platform_type": "alexa",
"platform_user_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I",
"platform_conversation_id": "amzn1.echo-api.session.9122211c-7fa8-43ae-b7e3-e56ebbdacc01",
"registered": false,
"segment_names": [
"Seg0715080610AM",
"Seg0715071857AM",
"Seg0715070437AM",
"Seg0715063307AM",
"Seg0715054215AM",
"Seg0715054027AM",
"Seg0715053845AM",
"Seg0715053646AM",
"Seg0715053156AM",
"Seg0715052407AM",
"Seg0715045748AM",
"Seg0714145246PM",
"Seg0714135150PM",
"Seg0714134041PM",
"Seg0714012505AM",
"Seg0714004152AM",
"Seg0714002843AM",
"Seg0713235444PM",
"Seg0713230241PM",
"Seg0713230030PM",
"Seg0713225825PM",
"Seg0713225548PM",
"Seg0713225028PM",
"Seg0713224159PM",
"Seg0713220356PM",
"Seg0711155346PM",
"Seg0711154018PM",
"Seg0711153432PM",
"Seg0711140748PM",
"Seg0711135636PM",
"Seg0711131412PM",
"Seg0711130857PM",
"Seg0711130157PM",
"Seg0711125338PM",
"Seg0711113158AM",
"customer",
"cmstest7",
"cmstest5",
"cmstest3",
"cmstest2",
"gffyrth",
"1testQR",
"1testgallery",
"121212"
]
}
},
{
"model": "analytics.request",
"pk": 90,
"fields": {
"intent": "GetUserAccountInformation",
"sub_intent": "",
"request_text": "what is my balance",
"response_text": "You have $111,111.11 and owe $111,111. Shall I break that down?",
"session_id": "1v69yiptamgse1niap51zr2o9x154169081480766b2d6b7-d3ce-4166-9292-c4669a3dfc14",
"user_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I",
"device_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ",
"device_type": "alexa",
"device_model": "NA",
"device_os": "alexa",
"elapsed_time": 2013,
"region": "NA",
"latitude": 0,
"longitude": 0,
"date": "2018-11-08T15:32:40.090+0000",
"ext_session_id": "",
"ext_user_id": "",
"score": 1,
"platform_type": "alexa",
"platform_user_id": "amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I",
"platform_conversation_id": "amzn1.echo-api.session.8586bff8-21a5-4336-9c9f-1c261362b89d",
"registered": false,
"segment_names": [
"Test_Segment0731174425PM",
"Test_Segment0731172344PM",
"Test_Segment0731165438PM",
"Test_Segment0731164321PM",
"Test_Segment0731163349PM",
"Test_Segment0731161939PM",
"Test_Segment0731160424PM",
"Test_Segment0730160925PM",
"Test_Segment0730154627PM",
"Test_Segment0730152806PM",
"Test_Segment0730152328PM",
"Test_Segment0730150203PM",
"Test_Segment0730141720PM",
"Test_Segment0730141304PM",
"testseg",
"Tester",
"Test0730162816PM",
"Test0730162304PM",
"Test0730161031PM",
"Test0730160632PM",
"Test0730160502PM",
"Seg0730154521PM",
"Seg0730154322PM",
"Seg0730153811PM",
"Seg0730153303PM",
"Seg0716231700PM",
"Seg0716230741PM",
"Seg0715080610AM",
"Seg0715071857AM",
"Seg0715070437AM",
"Seg0715063307AM",
"Seg0715054215AM",
"Seg0715054027AM",
"Seg0715053845AM",
"Seg0715053646AM",
"Seg0715053156AM",
"Seg0715052407AM",
"Seg0715045748AM",
"Seg0714145246PM",
"Seg0714135150PM",
"Seg0714134041PM",
"Seg0714012505AM",
"Seg0714004152AM",
"Seg0714002843AM",
"Seg0713235444PM",
"Seg0713230241PM",
"Seg0713230030PM",
"Seg0713225825PM",
"Seg0713225548PM",
"Seg0713225028PM",
"Seg0713224159PM",
"Seg0713220356PM",
"Seg0711155346PM",
"Seg0711154018PM",
"Seg0711153432PM",
"Seg0711140748PM",
"Seg0711135636PM",
"Seg0711131412PM",
"Seg0711130857PM",
"Seg0711130157PM",
"Seg0711125338PM",
"Seg0711113158AM",
"customer",
"cmstest7",
"cmstest5",
"cmstest3",
"cmstest2",
"gffyrth",
"1testQR",
"1testgallery",
"121212"
]
}
},
{...},
{...},
{...}
]
и я хочу извлечь из нее только определенные объекты (с jq
), используя ее селекторы.
Скажем, вернуть только те записи, где .fields.user_id == "abc"
Или же вернуть только те записи, где .fields.session_id =="1e2d3f"
select
, кажется, способ достичь этого, но я не уверен, как выразить вышеизложенное с его учетом структуры JSON выше.
Следующее дает пустой результат, тогда как оно должно возвращать записи для этого session_id:
curl -X GET 'http://localhost:8090/xxx/api/v1/results?dr=last5days' -H 'Cache-Control: no-cache' -H 'Postman-Token: f6b819d0-f4f6-4def-bccb-3967366779c7' -H 'secret: 5a04bfef-39eb-435a-a0d0-b274592790bb' | jq '.[] | select(.fields.session_id=="1v69yiptamgse1niap51zr2o9x154169081480766b2d6b7-d3ce-4166-9292-c4669a3dfc14")'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21785 0 21785 0 0 272k 0 --:--:-- --:--:-- --:--:-- 272k
$
Попытка различных комбинаций с функциями jq entries
, которые невполне работа:
curl -X GET 'http://localhost:8080/xxx/api/v1/results?dr=last5days' -H 'Cache-Control: no-cache' -H 'Postman-Token: f6b819d0-f4f6-4def-bccb-3967366779c7' -H 'secret: 5a04bf34ef-39eb-435a-a0d0-b278765790bb' | jq 'with_entries(select(.value.pk==98))'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 31755 0 31755 0 0 127k 0 --:--:-- --:--:-- --:--:-- 127k
jq: error (at <stdin>:274): Cannot use number (9) as object key
Может кто-нибудь, пожалуйста, помогите мне создать правильный jq
запрос?TIA.
===
Попытка реализовать предложение, выраженное в комментариях:
Это jq
выражение:
map(select(.fields.user_id=="amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I")) | length
, кажется,работать в JQ Playground (возвращает правильный счет 3 ):
, но при использовании в командной строке, онвозвращает неправильный результат (и пустой массив длиной 0 ):
$ curl -X GET 'http://localhost:8080/xxx/api/v1/results?dr=last5days' -H 'Cache-Control: no-cache' -H 'Postman-Token: f6b819d0-f4f6-4def-bccb-3967366779c7' -H 'secret: 5a04bfef-39eb-435a-a0d0-b271392790bb' | jq 'map(select(.fields.user_id=="amzn1.ask.account.AHMFB2H7ZXMSCB5TLPYWCPBJGWGHFYQZ6OPPMEPQ7CT2LZXNPAFJMJELXXCCTEZ2JUE5PXRSBJHJTO3AVXT3C63AOEZLIEP3D3HIFBT5M23G4ORENFRT54AAK7I4X2HCORXJAB2UGQAHPE2TC75F2GWWZWSPO2CWEAZJJN7LJYFWEYHEJDLNQ6FSUD5LQWKBUC347K3IF32IV3I")) | length'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21785 0 21785 0 0 95630 0 --:--:-- --:--:-- --:--:-- 95969
0
$
Что я все еще делаю неправильно?
======
Согласно предложениям в комментариях, следующий запрос с отладкой возвращает JSON, но по-прежнему не дает правильных значений:
$ curl -X GET 'http://localhost:8080/xxx/api/v1/results?dr=last5days' -H 'Cache-Control: no-cache' -H 'Postman-Token: f6b819d0-f4f6-4def-bccb-3967366779c7' -H 'secret: 5a04bfef-39eb-435a-a0d0-b271392790bb' | jq ' debug | map(select(.fields.session_id=="1v69yiptamgse1niap51zr2o9x154169081480766b2d6b7-d3ce-4166-9292-c4669a3dfc14")) | length'