เครื่องมือสำหรับนักพัฒนา · JSON ฟอร์แมตเตอร์ & เครื่องมือตรวจสอบความถูกต้อง
เหตุใด JSON ไม่มีความคิดเห็น: การตัดสินใจออกแบบและวิธีแก้ปัญหา
· พื้นหลัง
json มาตรฐาน การตรวจสอบ
ความคิดเห็นถูกลบออกจาก JSON โดยเจตนา โพสต์นี้จะอธิบายเหตุผล เหตุใดการพยายามเพิ่มกลับจึงสร้างรูปแบบใหม่ และตัวเลือกของคุณคืออะไรเมื่อไฟล์กำหนดค่าต้องการหมายเหตุจริงๆ
ความคิดเห็นที่ทำลายโครงสร้าง
ความคิดเห็นที่ทำลายโครงสร้าง - บันทึกที่เป็นประโยชน์ที่เพิ่มในการกำหนดค่า JSON และ parser ที่หยุดที่เครื่องหมายทับแรก ผู้เขียนอาจคัดลอกรูปแบบจาก JavaScript หรือโปรแกรมแก้ไขที่ทราบ JSONC ในขณะที่เครื่องมือการปรับใช้งานใช้ JSON แบบเข้มงวด การเน้นไวยากรณ์สามารถทำให้บันทึกดูถูกต้องแม้ว่าผู้บริโภคจะปฏิเสธเครื่องหมายแสดงความคิดเห็นตัวแรกก็ตาม
ความคิดเห็นถูกปฏิเสธเนื่องจากเครื่องหมายสแลชไม่ใช่โทเค็น JSON ที่เครื่องสแกนคาดหวังค่าหรือสมาชิก ToolAcre จะไม่ตัดไวยากรณ์ JSONC หรือ JSON5 ออกไปโดยไม่แจ้งให้ทราบ คุณสมบัติรูปทรงความคิดเห็นทั่วไปเป็นข้อมูลธรรมดาและอาจละเมิดสคีมาของแอปพลิเคชันแม้ว่าไวยากรณ์ JSON ที่เข้มงวดจะยอมรับก็ตาม การกล่าวอ้างในอดีตที่ไม่ได้รับการสนับสนุนเกี่ยวกับการออกแบบของ JSON จะถูกละเว้นหรือแก้ไข แทนที่จะนำเสนอเป็นข้อเท็จจริงที่เป็นที่ยอมรับโดยไม่มีหลักฐานหลักหรือแหล่งที่มาของมาตรฐานที่สามารถตรวจสอบย้อนกลับได้
เหตุผลของ Crockford ในการลบความคิดเห็น
เหตุผลของ Crockford ในการลบความคิดเห็น - คำอธิบายในภายหลังระบุว่ามีการใช้ความคิดเห็นเพื่อดำเนินการแยกวิเคราะห์คำสั่ง บ่อนทำลายการทำงานร่วมกันระหว่างการใช้งาน ผลการออกแบบที่เกี่ยวข้องคือมาตรฐาน JSON ไม่มีโทเค็นความคิดเห็น การกล่าวอ้างเกี่ยวกับแรงจูงใจส่วนตัว ลำดับเหตุการณ์ที่แน่นอน หรือการตอบสนองของอุตสาหกรรมที่เป็นสากล จำเป็นต้องมีแหล่งข้อมูลทางประวัติศาสตร์ที่ไม่ได้มาจากแหล่งเก็บข้อมูลนี้
ดังนั้น การกล่าวอ้างในอดีตที่ไม่ได้รับการสนับสนุนจึงละเว้นหรือแก้ไขที่นี่ มาตรฐานที่สังเกตได้และพฤติกรรมของตัวแยกวิเคราะห์นั้นเพียงพอแล้ว: JSON แบบเข้มงวดจะแลกเปลี่ยนข้อมูลผ่านประเภทค่าหกประเภทและคอนเทนเนอร์สองรายการ โดยไม่มีช่องทางคำอธิบายประกอบ ข้อจำกัดดังกล่าวป้องกันไม่ให้ผู้รับรายหนึ่งกำหนดความหมายในการดำเนินการให้กับข้อความที่ผู้รับรายอื่นเพิกเฉย แต่ยังทำให้ JSON สะดวกน้อยลงสำหรับการกำหนดค่าแบบดูแลรักษาด้วยมือ
สิ่งที่ผู้ตรวจสอบรายงานเกี่ยวกับความคิดเห็น
สิ่งที่เครื่องมือตรวจสอบรายงานเกี่ยวกับความคิดเห็น — `//` และ `/* */` ไม่ได้อยู่ในไวยากรณ์ ดังนั้นข้อผิดพลาดจึงไปที่เครื่องหมายทับแรกด้วยบรรทัดและคอลัมน์ เครื่องสแกนไม่คัดค้านคำในบันทึก ไม่สามารถขึ้นต้นค่า JSON ชื่อสมาชิก หรือตัวคั่นที่ถูกต้องด้วย `/` ที่ตำแหน่งนั้นได้
สำหรับ `{"port":8080, // local only "secure":false}` เครื่องหมายจุลภาคถูกต้อง และโทเค็นถัดไปที่ถูกต้องควรเป็นชื่อพร็อพเพอร์ตีในเครื่องหมายคำพูดหรือวงเล็บปีกกาปิด เครื่องหมายทับไม่ตรงตามที่คาดไว้ การลบเฉพาะหมายเหตุจะเหลือตัวคั่นและสมาชิกถัดไปที่ถูกต้อง ส่วนการลบเครื่องหมายวรรคตอนข้างเคียงอาจสร้างข้อผิดพลาดอีกจุด ตรวจสอบเอาต์พุตแบบเข้มงวดอีกครั้งหลังแก้ไขทุกครั้ง
รูปแบบที่เพิ่มความคิดเห็นกลับ
รูปแบบที่เพิ่มความคิดเห็นกลับ — JSONC อนุญาตให้แสดงความคิดเห็นเกี่ยวกับไวยากรณ์ JSON ที่คุ้นเคย ในขณะที่ JSON5 เพิ่มความสะดวก เช่น คีย์ตัวระบุที่ไม่มีเครื่องหมายคำพูด และเครื่องหมายจุลภาคต่อท้าย Hjson เน้นการแก้ไขโดยมนุษย์ด้วยไวยากรณ์ที่ผ่อนคลายเพิ่มเติม YAML มีไวยากรณ์ของตัวเอง รวมถึงความคิดเห็น และไม่ใช่แค่ JSON ที่เพิ่มคำอธิบายประกอบ
การยอมรับเป็นเรื่องเฉพาะสำหรับผู้บริโภค: การตั้งค่าตัวแก้ไขและการกำหนดค่า TypeScript อาจใช้ตัวแยกวิเคราะห์ที่ยอมรับความคิดเห็น ในขณะที่รายการแพ็คเกจหรือเนื้อหา API อาจต้องการ JSON ที่เข้มงวด Kubernetes โดยทั่วไปจะใช้ YAML หรือ JSON ตามเครื่องมือ ตั้งชื่อรูปแบบจริงในเอกสารประกอบและการจัดการไฟล์ การลอกส่วนขยายหรือการเรียกทุกสัญลักษณ์ออบเจ็กต์ “JSON” จะซ่อนขอบเขตความเข้ากันได้
วิธีแก้ปัญหาภายในเข้มงวด JSON
วิธีแก้ปัญหาภายในที่เข้มงวด JSON - `_comment` หรือ `//` คีย์ทั่วไปเก็บคำอธิบายในฐานะสมาชิกสตริงธรรมดา ยังคงมีการแยกวิเคราะห์ที่เข้มงวด เนื่องจากทั้งคีย์และค่าใช้โทเค็นมาตรฐาน บันทึกหลายรายการจำเป็นต้องมีคีย์เฉพาะหรืออาร์เรย์ เนื่องจากชื่อสมาชิกที่ซ้ำกันไม่น่าเชื่อถือและอาจถูกยุบโดย parsers
วิธีแก้ปัญหาจะเปลี่ยนแบบจำลองข้อมูล สคีมาที่มี `additionalProperties: false` สามารถปฏิเสธคำอธิบายประกอบได้ และแอปพลิเคชันอาจคงอยู่หรือส่งเป็นการกำหนดค่าจริง เอกสารภายนอก README ที่อยู่ใกล้เคียงหรือสคีมา `description` มักจะให้ช่องทางการอธิบายที่ปลอดภัยกว่า ใช้สมาชิกที่มีรูปแบบความคิดเห็นเฉพาะเมื่อผู้บริโภคทุกคนอนุญาตและเพิกเฉยต่อพวกเขาอย่างชัดเจน
ตัวอย่างการทำงาน: ไฟล์การตั้งค่าที่มีคำอธิบายประกอบ
ตัวอย่างการทำงาน: ไฟล์การตั้งค่าที่มีคำอธิบายประกอบ — เริ่มต้นด้วยแหล่งที่มา JSONC ที่มี `// seconds before retry` เหนือ `"timeout":30` หากปลายทางยอมรับเฉพาะ JSON ให้ใช้ parser ที่เข้าใจ JSONC เพื่อสร้างข้อมูล จากนั้นทำให้ข้อมูลเป็นอนุกรมเป็น JSON แบบเข้มงวด อาร์ติแฟกต์ที่ปรับใช้จะกลายเป็น `{"timeout":30}` ในขณะที่แหล่งที่มาที่ได้รับการบำรุงรักษายังคงมีคำอธิบายอยู่
อย่าลบความคิดเห็นด้วยนิพจน์ทั่วไป ลำดับเครื่องหมายทับสามารถปรากฏอย่างถูกต้องภายในสตริง เช่น URL และรูปแบบการบล็อกความคิดเห็นสามารถขยายบรรทัดในลักษณะที่การแทนที่ข้อความไม่ถูกต้อง รักษาแหล่งที่มาและอาร์ติแฟกต์ที่สร้างขึ้นให้แตกต่างกัน ตรวจสอบผลลัพธ์ที่เข้มงวด และจัดเตรียมการสร้างใหม่ในบิลด์ วิธีนี้จะรักษาบันทึกของผู้เขียนโดยไม่ต้องแสร้งว่า parser ที่รับสนับสนุน
สิ่งนี้ไม่ครอบคลุมถึง
สิ่งนี้ไม่ครอบคลุม — วิธีกำหนดค่า parsers แต่ละตัวให้ยอมรับความคิดเห็น ซึ่งเป็นเครื่องมือเฉพาะและมีการเปลี่ยนแปลงบ่อยครั้ง ตัวเลือกที่อนุญาตในไลบรารีหนึ่งจะไม่เปลี่ยนแปลงไวยากรณ์ JSON หรือรับประกันว่าบริการอื่นจะยอมรับข้อความเดียวกัน ตรวจสอบพาร์เซอร์ เวอร์ชัน และปลายทาง แทนที่จะอาศัยการแสดงผลของโปรแกรมแก้ไข
บทความนี้ยังหลีกเลี่ยงการกล่าวอ้างที่ไม่ได้รับการสนับสนุนอย่างชัดเจนว่าเมื่อใดที่ความคิดเห็นถูกลบ ใครที่นำวิธีแก้ปัญหาแต่ละอย่างมาใช้ก่อน หรือการตัดสินใจออกแบบเพียงครั้งเดียวทำให้เกิดความนิยมของ JSON หรือไม่ การยืนยันทางประวัติศาสตร์ดังกล่าวจำเป็นต้องมีแหล่งข้อมูลหลักที่เป็นอิสระ ในที่นี้จะมีการละเว้นหรือแก้ไข ข้อสรุปที่ได้รับการสนับสนุนนั้นจำกัดอยู่เพียงไวยากรณ์ที่เข้มงวดในปัจจุบัน พฤติกรรมของพื้นที่เก็บข้อมูล และความแตกต่างในการปฏิบัติงานระหว่างรูปแบบที่มีชื่อ
ประเด็นสำคัญ: JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูล ไม่ใช่ภาษาการกำหนดค่า
ประเด็นสำคัญ: JSON เป็นรูปแบบการแลกเปลี่ยนข้อมูล ไม่ใช่ภาษาการกำหนดค่าที่มีความคิดเห็นมากมาย และผู้ตรวจสอบจะแสดงจุดที่โน้ตแบ่งไวยากรณ์ที่เข้มงวดอย่างชัดเจน เมื่อมนุษย์ต้องการคำอธิบายประกอบ ให้เลือกรูปแบบที่เครื่องมือที่ใช้งานสนับสนุนอย่างเป็นทางการ หรือคงไว้ซึ่งแหล่งข้อมูลที่มีคำอธิบายประกอบซึ่งสร้างอาร์ติแฟกต์ที่เข้มงวดแยกต่างหาก อย่าถือว่าความคิดเห็นจะถูกเพิกเฉยอย่างไม่เป็นอันตราย
หากจำเป็นต้องมี JSON แบบเข้มงวด ให้ย้ายคำอธิบายไปยังเอกสารประกอบ หรือใช้ข้อมูลเมตาที่ได้รับการอนุมัติสคีมา จากนั้นตรวจสอบเอกสารขั้นสุดท้าย ToolAcre จงใจรายงานเครื่องหมายทับแรกแทนที่จะลบเนื้อหาโดยไม่แจ้งให้ทราบ เนื่องจากการแปลงโดยไม่โต้ตอบสามารถเปลี่ยนสตริงหรือปกปิดรูปแบบที่ไม่ตรงกันได้ บริบททางประวัติศาสตร์ควรยังคงมีระเบียบวินัยเท่าเทียมกัน: การกล่าวอ้างที่ไม่ได้รับการสนับสนุนจะถูกละเว้นหรือแก้ไข ในขณะที่ไวยากรณ์ที่สังเกตได้และพฤติกรรมของโปรแกรมแยกวิเคราะห์ถือเป็นข้อสรุป