นี่คือคำสั่ง jshon ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
ชอน — ตัวแยกวิเคราะห์ JSON สำหรับเชลล์
เรื่องย่อ
ชอน -[P|S|Q|V|C|I|0] [-F path] -[t|l|k|u|p|a] -[s|n] ค่า -[e|i|d] ดัชนี
DESCRIPTION
ชอน แยกวิเคราะห์ อ่าน และสร้าง JSON ได้รับการออกแบบมาให้ใช้งานได้ดีที่สุดจาก
ภายในเชลล์และแทนที่ parsers adhoc ที่เปราะบางซึ่งทำจาก grep/sed/awk รวมทั้ง
ตัวแยกวิเคราะห์บรรทัดเดียวรุ่นหนาที่ทำจาก perl/python
ชอน โหลดข้อความ json จาก stdin ดำเนินการ แล้วแสดงการดำเนินการล่าสุดบน stdout
อ็อพชันบางตัวส่งออก json อื่น ๆ เอาต์พุตสรุปข้อความธรรมดา เพราะ Bash มีมาก
โครงสร้างข้อมูลที่ซ้อนกันไม่ดี ชอน ไม่ส่งคืน JSON เป็นวัตถุดั้งเดิมตามปกติ
ห้องสมุดจะ. แทนที่ ชอน เก็บประวัติการแก้ไขไว้ในกอง และคุณจัดการ
องค์ประกอบ JSON สูงสุด
การกระทำ
แต่ละการกระทำจะอยู่ในรูปแบบของตัวเลือกสั้นๆ บางคนต้องการข้อโต้แย้ง ในขณะที่หลาย ๆ กรณี
of ชอน สอดผ่านกันได้ การกระทำควรล่ามโซ่ตามลำดับเพื่อลด
โทร. ตัวอย่างทั้งหมดใช้ตัวอย่าง json นี้:
{"a":1,"b":[จริง,เท็จ,null,"str"],"c":{"d":4,"e":5}}
jshon [การกระทำ] < sample.json
การใช้งานแบบอ่านอย่างเดียวทั่วไปส่วนใหญ่จะต้องใช้หลายอย่างเท่านั้น -e การกระทำและหนึ่ง -a ตรงกลางของ
พวกเขา
-t (ประเภท) ส่งกลับสตริง, อ็อบเจ็กต์, อาร์เรย์, หมายเลข, บูล, null
jshon -t -> วัตถุ
-l (ความยาว) ส่งกลับจำนวนเต็ม ใช้งานได้กับสตริง วัตถุ อาร์เรย์เท่านั้น
jshon -l -> 3
-k (คีย์) ส่งคืนรายการคีย์ที่คั่นด้วยการขึ้นบรรทัดใหม่ ใช้งานได้กับวัตถุเท่านั้น
jshon -k -> abc
-e ดัชนี
(แยก) ส่งคืนค่า json ที่ "ดัชนี" ใช้ได้เฉพาะกับอ็อบเจ็กต์, อาร์เรย์ ดัชนีของ an
อาร์เรย์เป็นจำนวนเต็ม
jshon -ec -> {"d":4,"e":5}
-a (ข้าม) จับคู่การกระทำที่เหลือในองค์ประกอบที่เลือก ใช้งานได้กับวัตถุเท่านั้น
และอาร์เรย์ หลายรายการ -a การโทรสามารถซ้อนกันได้ แม้ว่าความต้องการจะหายากในทางปฏิบัติ
jshon -eb -a -t -> bool bool null string
-s ความคุ้มค่า
(สตริง) ส่งคืนสตริงที่เข้ารหัส json ภายหลังสามารถ (-i) nserted ที่มีอยู่
โครงสร้าง
jshon -s "back\slash" -> "back\\slash"
-n ความคุ้มค่า
(nonstring/number) ส่งคืนองค์ประกอบ json ภายหลังสามารถ (-i) nserted ที่มีอยู่
โครงสร้าง. ค่าที่ถูกต้องคือ 'จริง', 'เท็จ', 'null', 'อาร์เรย์', 'วัตถุ', จำนวนเต็มและ
ลอย ตัวย่อ t, f, n, [] และ {} ตามลำดับก็ใช้ได้เช่นกัน
jshon -n วัตถุ -> {}
-u (unstring) ส่งคืนสตริงที่ถอดรหัสแล้ว ใช้งานได้กับประเภทธรรมดาเท่านั้น: string, int, real,
บูลีน, null.
jshon -eb -e 3 -u -> str
-p (ป๊อป) แสดงการจัดการล่าสุดจากสแต็ก ย้อนประวัติ มีประโยชน์สำหรับ
แยกค่าหลายค่าจากวัตถุเดียว
jshon -ec -ed -u -p -ee -u -> 4 5
-d ดัชนี
(ลบ) ลบรายการในอาร์เรย์หรือวัตถุ ดัชนีอาร์เรย์เชิงลบจะห่อ
รอบ
jshon -db -> {"a":1,"c":{"d":4,"e":5}}
-i ดัชนี
(แทรก) มีความซับซ้อน เป็นการย้อนกลับของสารสกัด Extract วางองค์ประกอบย่อย json
บนสแต็ก แทรกเอาองค์ประกอบย่อยออกจากสแต็กและแทรกบิตของjson
ลงในอาร์เรย์/อ็อบเจ็กต์ที่ใหญ่กว่าด้านล่าง ใช้สารสกัดเพื่อดำดิ่งสู่ต้นไม้ json
ลบ/สตริง/ไม่สตริงเพื่อเปลี่ยนแปลงสิ่งต่างๆ และแทรกเพื่อผลักดันการเปลี่ยนแปลงกลับเข้าสู่
ต้นไม้.
jshon -ea -ia -> json . ดั้งเดิม
jshon -s หนึ่ง -ia -> {"a":"หนึ่ง", ...}
อาร์เรย์ได้รับการจัดการในลักษณะพิเศษ การผ่านจำนวนเต็มจะแทรกค่าโดยไม่มี
เขียนทับ ยอมรับจำนวนเต็มลบได้ เช่นเดียวกับสตริง 'ผนวก' ที่จะเขียนทับ
ค่าในอาร์เรย์: ลบดัชนี -NS ค่าใหม่แล้วแทรกที่ดัชนี
jshon -eb -d 0 -sq -i 0 -> {"b":"q",false,null,"str"}
ไม่ใช่การจัดการ
มี meta-options หลายตัวที่ไม่ได้แก้ไข json โดยตรง เรียกสิ่งเหล่านี้ได้มากที่สุดหนึ่งครั้งต่อ
วิงวอน
-F
(file) อ่านจากไฟล์แทน stdin ตัวเลือกเดียวที่ไม่ใช้การจัดการเพื่อรับ an
ข้อโต้แย้ง.
-P (jsonp) ตัดการเรียกกลับ jsonp ก่อนดำเนินการต่อตามปกติ
-S (sort) ส่งคืน json ที่จัดเรียงตามคีย์ แทนการเรียงลำดับดั้งเดิม
-Q (เงียบ) ปิดใช้งานการรายงานข้อผิดพลาดบน stderr ดังนั้นคุณไม่จำเป็นต้องโรย "2> /dev/null"
ตลอดทั้งสคริปต์ของคุณ
-V (by-value) เปิดใช้งาน pass-by-value บนสแต็กประวัติการแก้ไข ในกรณีที่รุนแรงกับ
ค่าที่ซ้อนกันอย่างลึกซึ้งหลายพันค่านี้อาจส่งผลให้ ชอน วิ่งช้าลงหลายเท่า
ในขณะที่ใช้หน่วยความจำเพิ่มขึ้นหลายเท่า อย่างไรก็ตาม ค่าพลอยได้นั้นปลอดภัยกว่าค่าอ้างอิงและ
มักทำให้แปลกใจน้อยลง By-reference เปิดใช้งานโดยค่าเริ่มต้นเนื่องจากไม่มี
ความเสี่ยงระหว่างการดำเนินการแบบอ่านอย่างเดียวและโดยทั่วไปทำให้การแก้ไข json สะดวกยิ่งขึ้น
jshon -ec -n 7 -id -p -> c["d"] == 7
jshon -V -ec -n 7 -id -p -> c["d"] == 5
jshon -V -ec -n 7 -id -ic -> c["d"] == 7
กับ -V การเปลี่ยนแปลงจะต้องแทรกกลับด้วยตนเองผ่านสแต็กแทนเพียง
โผล่ออกจากค่ากลาง
-C (ต่อ) กับข้อผิดพลาดที่อาจกู้คืนได้ ตัวอย่างเช่น การแยกค่าที่ไม่
มีอยู่จะเพิ่ม 'null' ให้กับกองแก้ไขแทนที่จะยกเลิก พฤติกรรมอาจเปลี่ยนแปลงใน
อนาคต.
-I (แทนที่) การแก้ไขไฟล์ ต้องใช้ไฟล์เพื่อแก้ไขและใช้งานได้กับ -F เท่านั้น นี่คือ
หมายถึงการเปลี่ยนแปลงเล็กน้อยในไฟล์ json เมื่อใช้ เอาต์พุตปกติจะถูกระงับ
และด้านล่างของกองแก้ไขจะถูกเขียนออกมา
-0 (ตัวคั่นค่าว่าง) เปลี่ยนตัวคั่นของ -u จากการขึ้นบรรทัดใหม่เป็นค่าว่าง ตัวเลือกนี้
มีผลกับ -u เท่านั้นเพราะนั่นเป็นครั้งเดียวที่การขึ้นบรรทัดใหม่อาจปรากฏใน
เอาท์พุต
--รุ่น
ส่งกลับการประทับเวลา YYYYMMDD และออก
อื่น ๆ TOOLS
ชอน ส่งออกหนึ่งฟิลด์ต่อบรรทัดเสมอ เครื่องมือยูนิกซ์จำนวนมากคาดว่าจะแยกหลายแท็บ
ฟิลด์ต่อบรรทัด ไปป์เอาต์พุตผ่าน 'วาง' เพื่อแก้ไขปัญหานี้ อย่างไรก็ตาม แปะไม่ได้
จัดการบรรทัดว่างเพื่อรองบรรทัดที่มีตัวยึดตำแหน่ง นี่คือตัวอย่าง:
jshon ... | sed 's/^$/-/' | วาง -s -d '\t\t\n'
ซึ่งจะแทนที่ช่องว่างด้วย '-' และรวมทุกสามบรรทัดเป็นหนึ่งเดียว
มีเครื่องมือมากมายที่สร้างเอาต์พุต json บ่อยครั้งที่สิ่งเหล่านี้ใช้การเน้นเส้น
json/plaintext hybrid โดยที่แต่ละบรรทัดเป็นโครงสร้าง json อิสระ น่าเศร้าที่สิ่งนี้หมายถึง
ผลลัพธ์โดยรวมไม่ใช่ json ที่ถูกต้องตามกฎหมาย ไม่ว่าจะวนซ้ำข้อมูลทีละบรรทัด
(เรียก ชอน หนึ่งครั้งสำหรับแต่ละบรรทัด) หรือแปลงเป็นอาร์เรย์ json ที่ถูกต้อง ตัวอย่างเช่น:
ขณะอ่านบรรทัด; ทำ jshon <<< "$line"; เสร็จสิ้น <<(journalctl -o json)
journalctl -o json | sed -e '1i[' -e '$!s/$/,/' -e '$a]' | ชอน
GOLF
หากคุณสนใจเรื่องสั้นมากเพียงเส้นเดียว การโต้แย้งสามารถย่อได้เมื่อไม่เป็นเช่นนั้น
ทำให้เกิดความไม่ชัดเจน ตัวอย่างจาก -โผล่) สามารถตีกอล์ฟได้ดังนี้
jshon -ec -ed -u -p -ee -u == jshon -ec -ed -upee -u
ฉันไม่แนะนำให้ทำเช่นนี้ (มันทำให้สิ่งที่เข้าใจยากขึ้นมาก) แต่บางคน
กอล์ฟแม้จะมีผลที่ตามมา
การสร้าง JSON
ชอน สามารถสร้าง json โดยส่งวัตถุว่างเป็นอินพุต:
jshon -s หนึ่ง -ia <<< "{}"
ผู้เขียน
ชอน ถูกเขียนโดย Kyle Keen[ป้องกันอีเมล]> พร้อมแพทช์จาก Dave Reisner
<[ป้องกันอีเมล]>, AndrewF (BSD, OSX, jsonp, การเรียงลำดับ) และ Jean-Marc A (โซลาริส)
ใช้ jshon ออนไลน์โดยใช้บริการ onworks.net