วิธีการนับรายการในวัตถุ JSON โดยใช้บรรทัดคำสั่ง?


179

ฉันได้JSONรับคำตอบเช่นนี้จากcurlคำสั่ง:

[
  {
    "cid": 49,
    "pyn": "yi4",
    "hans": "亿",
    "hant": "億",
    "tid": 68,
    "l10n": "cent million",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  },
  {
    "cid": 50,
    "pyn": "yi4",
    "hans": "亿",
    "hant": "億",
    "tid": 69,
    "l10n": "100 millions",
    "pid": 1,
    "pos": "num",
    "pos_txt": ""
  }
]

ฉันจะนับจำนวนรายการในอาร์เรย์ (ที่นี่2) การใช้Bashหรือบรรทัดคำสั่ง (เช่นunderscore) ได้อย่างไร


โซลูชัน JavaScript นั้นใช้ได้สำหรับคุณหรือไม่
thefourtheye

ผ่านNPMโมดูลใช่ มิฉะนั้นจะไม่
Édouard Lopez

ตรวจสอบทางออกของฉัน นั่นไม่ต้องการ npm JavaScript ธรรมดา
thefourtheye

1
ฉันอยู่ในบริบททุบตีไม่ใช่เว็บ
Édouard Lopez

คุณรู้หรือไม่ว่าคุณสามารถรัน JavaScript ในเชลล์ได้ใช่ไหม
thethourtheye

คำตอบ:


358

เพียงโยนสารละลายอื่นลงในส่วนผสม ...

ลองjqตัวประมวลผลบรรทัดคำสั่ง JSON แบบ Lightweight และยืดหยุ่น:

jq length /tmp/test.json

พิมพ์ความยาวของอาร์เรย์ของวัตถุ


4
jqรหัสเริ่มต้นของคุณ( .[]) คืนความยาวของแต่ละอันobjectในอาเรย์รากในขณะที่ฉันกำลังค้นหาความยาวของอาเรย์รากนั้น จำเป็นต้องแก้ไข.
Édouard Lopez

11
หากรูทของคุณไม่ใช่อาเรย์ แต่เป็นวัตถุที่มีคีย์ซึ่งมีอาเรย์คือ {"key": [elem1, elem2]} คุณสามารถใช้ use ได้jq '.[] | length' file.json
bitek

8
เครื่องมือที่น่าทึ่งjqคือ +1
Ory Band

อีกหนึ่งทางเลือกที่มีประโยชน์สำหรับ @MnemonicFlow jq map_values(length) file.jsonที่เป็น ที่จะให้กุญแจเช่นกัน
เปาโล Casaretto

3
และถ้าการป้อนข้อมูลของคุณทำจากวัตถุอิสระแทนที่จะเป็นอาเรย์เดี่ยวคุณจะต้องใช้ตัวเลือก-sหรือ--slurpตัวเลือกที่รวบรวมพวกมันไว้ในอาเรย์ขณะอ่าน:jq -s length file.json
hemflit


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