2 คะแนน โดย GN⁺ 2023-12-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

สรุปตัวแปลง JCJSON

  • jc จะแปลงเอาต์พุตของเครื่องมือ CLI, ประเภทไฟล์ และสตริงทั่วไปให้อยู่ในรูปแบบ JSON เพื่อให้พาร์สในสคริปต์ได้ง่ายขึ้น
  • สามารถดูตัวอย่างเอาต์พุตที่ถูกแปลงเป็น JSON ผ่านคำสั่ง dig และนำไปประมวลผลต่อด้วยเครื่องมืออย่าง jq หรือ jello ได้
  • ใช้งานเป็นไลบรารี Python ได้เช่นกัน โดยในกรณีนี้จะคืนค่าเป็น Python dictionary, รายการของ dictionary หรือ iterable แบบ lazy ของ dictionary แทน JSON

วิธีติดตั้งตัวแปลง JCJSON

  • ติดตั้งได้ผ่าน pip, ที่เก็บแพ็กเกจของระบบปฏิบัติการ หรือดาวน์โหลดไบนารี
  • มีคำสั่งติดตั้งสำหรับลินุกซ์ดิสโทรหลายแบบ, macOS และ FreeBSD

วิธีใช้งานตัวแปลง JCJSON

  • รับอินพุตที่ pipe มาจาก STDIN แล้วส่งเอาต์พุตของคำสั่งก่อนหน้าออกทาง STDOUT ในรูปแบบ JSON
  • ใช้ไวยากรณ์ "magic" โดยเติม jc ไว้หน้าคำสั่งเพื่อแปลง หรือใช้หน้าพาธไฟล์ /proc ได้
  • ปรับรูปแบบเอาต์พุตและประมวลผลเฉพาะบางบรรทัดได้ผ่านตัวเลือก parser และฟังก์ชัน slice ที่หลากหลาย

จุดเด่นของตัวแปลง JCJSON

  • มีทั้งการแสดงข้อมูลแบบปกติและแบบ raw และจะแปลงค่าตัวเลขที่รู้จักตามสคีมาให้เป็นค่า JSON แบบ int/float
  • เข้าถึง JSON แบบดิบที่ผ่านการ preprocess ได้ด้วยตัวเลือก --raw หรือพารามิเตอร์ raw=True
  • มี streaming parser สำหรับจัดการเอาต์พุตคำสั่งปริมาณมากได้อย่างประหยัดหน่วยความจำ

ความสำคัญของตัวแปลง JCJSON

  • สามารถดูแรงบันดาลใจของโปรเจ็กต์ที่ต้องการนำปรัชญา Unix มาปรับใช้ในศตวรรษที่ 21 และกรณีการใช้งานต่าง ๆ ได้จากบล็อกโพสต์และบทสัมภาษณ์
  • มีประโยชน์ในการพาร์สเอาต์พุตคำสั่งในหลายสภาพแวดล้อม เช่น Bash scripting, Ansible, Saltstack, Nornir และ FortiSOAR

ความเข้ากันได้ของตัวแปลง JCJSON

  • parser บางตัวทำงานได้โดยไม่ขึ้นกับแพลตฟอร์ม และ parser ที่แปลงเอาต์พุตเฉพาะแพลตฟอร์มอาจสร้างข้อความเตือนเรื่องความเข้ากันได้
  • ตรวจสอบข้อมูล parser ทั้งหมดได้ด้วยการรัน jc -ap

วิธีมีส่วนร่วมกับตัวแปลง JCJSON

  • ยินดีรับการมีส่วนร่วมทั้งการเพิ่มหรือปรับปรุงโค้ดและ parser โดยสามารถใช้ jc/parsers/foo.py หรือ jc/parsers/foo_s.py เป็นต้นแบบแล้วส่ง pull request ได้

ความเห็นของ GN⁺

ประเด็นสำคัญที่สุดของบทความนี้คือ jc สามารถแปลงเอาต์พุตของคำสั่ง, ประเภทไฟล์ และสตริงหลากหลายแบบให้เป็น JSON เพื่อให้นำไปประมวลผลเชิงโปรแกรมได้ ซึ่งช่วยให้นักพัฒนาจัดการข้อมูลได้ง่ายขึ้น โดยเฉพาะเมื่อต้องทำสคริปต์ในสภาพแวดล้อม Unix และ Linux บทความนี้น่าสนใจเพราะ jc เป็นเครื่องมือที่ช่วยยกระดับระบบอัตโนมัติและประสิทธิภาพในการพัฒนาซอฟต์แวร์และการดูแลระบบได้อย่างมาก

1 ความคิดเห็น

 
GN⁺ 2023-12-10
ความเห็นบน Hacker News
  • กล่าวถึงการแก้ปัญหาการแปลงผลลัพธ์คำสั่งเป็นรูปแบบ JSON บน FreeBSD โดยใช้ไลบรารี libxo

    • คำสั่ง ls เคยรองรับ แต่มีกรณีที่ถูกถอดออก
    • ไม่ได้รองรับในทุกยูทิลิตี
    • PowerShell ให้ผลลัพธ์แบบมีโครงสร้างมาโดยปริยาย
    • มีการเสนอความจำเป็นของการทำให้แฟลก --json เป็นมาตรฐานบน Unix/Linux เช่นกัน
  • แสดงความกังวลเกี่ยวกับความยากในการบำรุงรักษา

    • คาดว่าการดูแลจะทำได้ยาก เช่น การจัดการเวอร์ชัน และการเปลี่ยนแปลงแฟลกของคำสั่ง
    • วิธีใช้เครื่องมือแบบ --<CMD> อาจทำให้ help/manual ซับซ้อนขึ้น
  • แนะนำเครื่องมือชื่อ Nushell

    • เป็นแนวทางที่ให้ข้อมูลแบบมีโครงสร้างจากตัวเชลล์เอง
  • ประเมินในแง่บวกที่เครื่องมือ CLI รองรับการส่งออกเป็น JSON

    • แต่ในทางปฏิบัติมักเป็น JSON ที่ซับซ้อนหรือไม่จำเป็น จึงมีข้อสงสัยเรื่องความใช้งานได้จริง
  • แสดงความคิดเห็นเกี่ยวกับวิธีใช้เครื่องมือ jc

    • jc dig example.com ควรเป็นรูปแบบการใช้งานหลักที่ดีกว่า dig example.com | jc --dig
  • แสดงความชอบที่ใน PowerShell ผลลัพธ์ทุกอย่างเป็นอ็อบเจ็กต์

    • เวลาต้องเขียนสคริปต์ Bash จะคิดถึงความสามารถนี้
  • แสดงความนับถือต่อผู้ที่รับหน้าที่บำรุงรักษาเครื่องมือ jc

  • ถามถึงรายชื่อเครื่องมือคำสั่งยูนิกซ์สมัยใหม่ที่รองรับตัวเลือก --json

    • การเพิ่มข้อมูลนี้ไว้ในรีโพซิทอรีอาจมีประโยชน์
  • ชี้ให้เห็นข้อบกพร่องด้านการออกแบบของยูนิกซ์

    • โปรแกรมคำสั่งส่งออกได้เพียงรหัสจบการทำงานแบบจำนวนเต็มให้โปรแกรมที่เรียกใช้
    • เมื่อโปรแกรม GUI เรียกโปรแกรมคำสั่ง จึงได้ข้อมูลที่จำกัด
  • แสดงความแปลกใจที่ไม่ได้ใช้ textfsm

    • textfsm ถูกใช้อย่างแพร่หลายในการพาร์สผลลัพธ์ CLI ของอุปกรณ์เครือข่าย