ฉันจะเลือกหลายช่องใน jq


97

ไฟล์อินพุตของฉันมีลักษณะดังนี้:

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

ฉันสามารถรับชื่อล็อกอินทั้งหมดด้วยสิ่งนี้: cat members | jq '.[].login'

แต่ฉันไม่สามารถถอดรหัสไวยากรณ์เพื่อรับทั้งล็อกอินและ id?


คุณสามารถให้ตัวอย่างว่าผลลัพธ์ที่คุณคาดหวังควรมีลักษณะอย่างไร มีหลายวิธีในการแสดงคู่ล็อกอิน / id

คำตอบ:


138

คุณสามารถใช้jq '.[] | .login, .id'เพื่อรับการเข้าสู่ระบบแต่ละครั้งตามด้วย id


1
ตัวอย่างอินพุตของผู้ใช้ดูเหมือนสตรีมของอ็อบเจ็กต์ แต่เนื่องจากสคริปต์ตัวอย่างที่มีให้ฉันจึงคิดว่ามันถูกรวมไว้ในอาร์เรย์ที่พวกเขาละเว้น

1
@SantiagoLapresta: ไม่จำเป็นต้องมีข้อสันนิษฐานนั้น jqใช้งานได้ดีกับลำดับของวัตถุ - ไม่จำเป็นต้องใช้ตัวห่ออาร์เรย์ ...สตริงและต่อท้ายสุดท้ายกำจัดจุลภาคจำเป็น แต่ผมคิดว่าการที่มีนัย
Peter V.Mørch

55
หรือถ้าคุณต้องการให้แสดงเฉพาะสองฟิลด์นั้น jq '.[] | {login, id}'
Cameron Taggart

4
@CameronTaggart ถ้าฉันต้องการแสดงlogin.nameอะไร jq '.[] | {login.name, id}'ดูเหมือนจะได้ผลโปรดทราบวิธีที่เหมาะสมคืออะไร?
zyxue

6
@zyxue งานนี้:jq '.[] | {name: .login.name, id}'
Alex Grounds


10

ในการเลือกค่าที่เยื้องไปยังระดับต่างๆ (เช่นทั้งระดับแรกและระดับที่สอง) คุณอาจใช้สิ่งต่อไปนี้:

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

2

เพียงแค่ให้อีกหนึ่งตัวอย่างที่นี่ (jq-1.6):

เดินผ่านอาร์เรย์และเลือกฟิลด์ขององค์ประกอบวัตถุและฟิลด์ของวัตถุในวัตถุนั้น

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

หากไม่มีข้อมูลตัวอย่าง:

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

.[]: เดินผ่านอาร์เรย์

{id, name: .private_info.name}: ใช้. id และ. private_info.name และรวมไว้ในวัตถุที่มีชื่อฟิลด์ "id" และ "name" ตามลำดับ


การรวมเข้ากับวัตถุเพื่อรักษาโครงสร้าง / ชื่อคีย์นั้นยอดเยี่ยมสิ่งที่ฉันกำลังมองหา
cryanbhu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.