jq: определить, является ли ввод списком или диктом - PullRequest
0 голосов
/ 13 января 2020

Мне нужен одинаковый вывод CSV для одного и другого списка.

Но я не могу понять, как сделать это с jq.

Случай 1: вход является dict :

$ curl --silent 'https://uinames.com/api/?amount=1' 
{"name":"Daniel","surname":"Gligor","gender":"male","region":"Romania"}

и моим соответствующим jq выражением:

$ curl --silent 'https://uinames.com/api/?amount=1' |
  jq -r '[.name, .surname] | @csv'
"Angel","Sîrghie"

Случай 2: вход представляет собой список диктов :

$ curl --silent 'https://uinames.com/api/?amount=2' 
[{"name":"Summer","surname":"Lee","gender":"female","region":"Canada"},{"name":"Július","surname":"Dzurjanin","gender":"male","region":"Slovakia"}]

Мое выражение:

$ curl --silent 'https://uinames.com/api/?amount=2' |
> jq -r '.[] | [.name, .surname] | @csv'
"Francisca","Navarro"
"Larisa","Dănescu"

Я перепробовал множество вариантов с if/else, select(), path(), //, et c К сожалению, я не могу создать рабочее выражение.

1 Ответ

0 голосов
/ 13 января 2020

type ваш друг:

if type == "array" then .[] else . end
| [.name, .surname]
| @csv'
...