Допустим, у нас есть этот файл:
{
"persons": [
{
"friends": 4,
"phoneNumber": 123456,
"personID": 11111
},
{
"friends": 2057,
"phoneNumber": 432100,
"personID": 22222
},
{
"friends": 50,
"phoneNumber": 147258,
"personID": 55555
}
]
}
Теперь я хочу извлечь номера телефонов лиц 11111
, 22222
, 33333
, 44444
и 55555
в виде строки, разделенной точкой с запятой:
123456;432100;;;147258
во время работы
cat persons.txt | jq ".persons[] | select(.personID==<ID>) | .phoneNumber"
один раз для каждого <ID>
и склеивание результатов вместе с ;
после этого работает, это ужасно медленно, потому что необходимо перезагрузить файл для каждого из идентификаторов (и других полей, которые я хочу извлечь).
Объединить его в одном запросе:
cat persons.txt | jq "(.persons[] | select(.personID==11111) | .phoneNumber), (.persons[] | select(.personID==22222) | .phoneNumber), (.persons[] | select(.personID==33333) | .phoneNumber), (.persons[] | select(.personID==44444) | .phoneNumber), (.persons[] | select(.personID==55555) | .phoneNumber)"
Это тоже работает, но дает
123456
432100
147258
поэтому я не знаю, какие поля пропущены и сколько ;
мне нужно вставить.