Jq'de birden çok alanı nasıl seçerim


97

Girdi dosyam şuna benzer:

{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}

Tüm giriş adlarını bununla alabilirim: cat members | jq '.[].login'

ama hem giriş hem de kimliği almak için sözdizimini kıramadım?


Beklediğiniz çıktının nasıl olması gerektiğine dair bir örnek verebilir misiniz? Oturum açma / kimlik çiftlerinin temsil edilmesinin birçok yolu vardır.

Yanıtlar:


138

jq '.[] | .login, .id'Her bir girişi ve ardından kimliğini almak için kullanabilirsiniz .


1
Kullanıcıların örnek girdisi bir nesne akışı gibi görünüyor, ancak sağladıkları örnek komut dosyası nedeniyle, bunun atladıkları bir diziye sarıldığını varsayıyorum.

1
@SantiagoLapresta: Bu varsayıma gerek yok. jqbir dizi nesne ile harika çalışır - dizi sarmalayıcıya gerek yoktur. ...Dizeleri ve son Sondaki virgül ihtiyaç giderme, ama ima edilmesi düşünüyoruz.
Peter V.Mørch

55
Veya sadece bu iki alanın görüntülenmesini istiyorsanız. jq '.[] | {login, id}'
Cameron Taggart

4
@CameronTaggart, ya görüntülemek istersem login.name? jq '.[] | {login.name, id}'işe yarıyor gibi görünüyor, doğru yol nedir lütfen?
zyxue

7
@zyxue Bu çalışır:jq '.[] | {name: .login.name, id}'
Alex Grounds

65

Bu benim için çalışıyor:

> echo '{"a":1,"b":2,"c":3}{"a":1,"b":2,"c":3}' | jq '{a,b}'
{
  "a": 1,
  "b": 2
}
{
  "a": 1,
  "b": 2
}

10

Farklı düzeylere (yani hem birinci hem de ikinci düzey) girintilenmiş değerleri seçmek için aşağıdakileri kullanabilirsiniz:

$ echo '[{"a":{"aa":1,"ab":2},"b":3,"c":4},{"a":{"aa":5,"ab":6},"b":7,"c":8}]'|jq '.[]|[.a.aa,.a.ab,.b]'

[
  1,
  2,
  3
]
[
  5,
  6,
  7
]

3

Burada bir örnek daha verin (jq-1.6):

Bir dizide gezinin ve bir nesne öğesinin bir alanını ve bu nesnedeki bir nesne alanını seçin

echo '[{"id":1, "private_info": {"name": "Ivy", "age": 18}}, {"id":2, "private_info": {"name": "Tommy", "aga": 18}}]' | jq ".[] | {id: .id, name: .private_info.name}" -

{
  "id": 1,
  "name": "Ivy"
}
{
  "id": 2,
  "name": "Tommy"
}

Örnek veriler olmadan:

jq ".[] | {id, name: .private_info.name}" -

.[]: bir dizide gezinmek

{id, name: .private_info.name}: .id ve .private_info.name alın ve sırasıyla alan adı "id" ve "ad" olan bir nesneye sarın


yapıyı / anahtar adlarını korumak için nesneye sarmak harika, tam da aradığım şey
cryanbhu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.