Potrzebuję podobnego wyjścia CSV zarówno dla pojedynczego dyktu, jak i listy dykt.

Ale nie rozumiem, jak to zrobić za pomocą jq.

Przypadek 1: dane wejściowe to dict :

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

I moje odpowiednie wyrażenie jq:

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

Przypadek 2: dane wejściowe to lista poleceń :

$ 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"}]

Moje wyrażenie:

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

Wypróbowałem wiele wariantów z if/else, select(), path(), // itd. Niestety nie mogę utworzyć działającej ekspresji.

0
viktorkho 13 styczeń 2020, 16:24

1 odpowiedź

Najlepsza odpowiedź

type jest Twoim przyjacielem:

if type == "array" then .[] else . end
| [.name, .surname]
| @csv'
0
peak 13 styczeń 2020, 18:33