Analisando JSON com JQ

1

Estou usando o Bash para executar o seguinte trecho de script em uma caixa do Linux.

Conteúdo do arquivo JSON: [ { "id": 123456, "firstName": "John", "lastName": "Smith", "email": "[email protected]" } ]


O arquivo JSON é armazenado na matriz ${data[0]} , que é canalizada para o script Bash.


Script de bash:

trafficEmployeeId=123456 cat "${data[0]}" | jq --arg employeeId $trafficEmployeeId '.[] | select(.id == $employeeId) | .firstName'


E a saída do script deve ser John . Mas eu não entendo nada.

    
por Berni 20.10.2017 / 18:21

1 resposta

2

Mesmo que você tenha atribuído a variável de shell trafficEmployeeId com um número , ela será passada para o script jq como um argumento string .
A solução é analisar o argumento como um número com a função jq tonumber .
O segundo momento é que data[0] contém o array com apenas um objeto, então é suficiente acessá-lo diretamente com .[0] e aplicar a condição do operador if simples.

Solução completa:

trafficEmployeeId=123456
echo "${data[0]}" | jq --arg employeeId "$trafficEmployeeId" '.[0] 
      | if .id == ($employeeId | tonumber) then .firstName else empty end'

A saída:

"John"
    
por 20.10.2017 / 18:39