เครื่องมือสำหรับนักพัฒนา · JSON ฟอร์แมตเตอร์ & เครื่องมือตรวจสอบความถูกต้อง
เหตุใดเครื่องหมายจุลภาคต่อท้ายจึงแบ่ง JSON และจุดที่เครื่องมือตรวจสอบความถูกต้องชี้
· มันทำงานอย่างไร
json นักพัฒนาเวิร์กโฟลว์ การตรวจสอบ
เครื่องหมายจุลภาคต่อท้ายเป็นข้อผิดพลาด JSON ที่พบบ่อยที่สุด และข้อผิดพลาดไม่เคยอยู่ที่เครื่องหมายจุลภาคเลย เรียนรู้ว่าไวยากรณ์คาดหวังอะไรหลังเครื่องหมายจุลภาค และวิธีอ่านตำแหน่งที่รายงาน
ข้อผิดพลาดหนึ่งตัวอักษรที่ใช้เวลาสิบนาทีในการค้นหา
ข้อบกพร่องหนึ่งตัวอักษรที่ใช้เวลาสิบนาทีในการค้นหา เช่น การกำหนดค่าที่แก้ไขด้วยมือ เครื่องหมายจุลภาคทิ้งไว้หลังคุณสมบัติสุดท้าย และบิลด์ที่ล้มเหลว ตัวแยกวิเคราะห์ที่เข้มงวดตามลำดับโทเค็นที่ปรากฏจริงในเอกสาร พิจารณาอ็อบเจ็กต์ที่ลงท้ายด้วย `'enabled': true,` และอาร์เรย์ที่ลงท้ายด้วย `'blue',`: ตัวคั่นทั้งสองสัญญากับไอเท็มอื่นแม้ว่าโทเค็นถัดไปจะปิดคอนเทนเนอร์ก็ตาม
ToolAcre ไม่ได้รับตำแหน่งจากข้อความของโปรแกรมเบราว์เซอร์ JSON.parse ตัดสินความถูกต้องก่อน หลังจากเกิดความล้มเหลวเท่านั้น เครื่องสแกนพื้นที่เก็บข้อมูลจะส่งข้อความและรายงานอักขระตัวแรกที่ยอมรับไม่ได้ สำหรับเครื่องหมายจุลภาคต่อท้าย อักขระนั้นคือวงเล็บปีกกาหรือวงเล็บปิด และเหตุผลที่ระบุอย่างชัดเจนว่า "เครื่องหมายจุลภาคต่อท้าย" ในวัตถุ ชื่อสมาชิกที่ยกมาอื่นหายไป ในอาร์เรย์ ค่าสมบูรณ์อื่นหายไป
สิ่งที่ไวยากรณ์ JSON พูดหลังเครื่องหมายจุลภาค
สิ่งที่ไวยากรณ์ JSON พูดหลังเครื่องหมายจุลภาค — RFC 8259 ใช้เครื่องหมายจุลภาคเพื่อแยกค่าในอาร์เรย์และสมาชิกในวัตถุ ตัวคั่นจึงจำเป็นต้องมีรายการที่ถูกต้องในแต่ละด้าน หลังเครื่องหมายจุลภาคของอ็อบเจ็กต์ parser ต้องการชื่อที่มีเครื่องหมายคำพูดคู่ เครื่องหมายทวิภาค และค่า หลังเครื่องหมายจุลภาคอาร์เรย์ คาดหวังค่า JSON ที่ถูกต้อง ตัวคั่นการปิดบัญชีไม่สามารถตอบสนองการใช้งานจริงได้
ตัวคั่นอยู่ระหว่างสมาชิกหรือองค์ประกอบสองตัว ไม่ต้องอยู่หลังสมาชิกสุดท้าย การลบเครื่องหมายจุลภาคสุดท้ายจะไม่เปลี่ยนแปลงค่าหรือลำดับ จะคืนค่าไวยากรณ์ที่ปิดคอนเทนเนอร์โดยตรงหลังจากค่าสุดท้าย นี่คือสาเหตุที่เครื่องหมายจุลภาคสามารถปรากฏหลังทุกรายการก่อนหน้าได้โดยไม่มีปัญหา: แต่ละรายการด้วยเครื่องหมายจุลภาคจะตามด้วยรายการถัดไปที่สัญญาไว้
เหตุใดข้อผิดพลาดจึงไปอยู่ในวงเล็บปิด
เหตุใดข้อผิดพลาดจึงมาอยู่ในวงเล็บปิด — มีเครื่องหมายจุลภาคอยู่ตรงกลางคอนเทนเนอร์ ดังนั้น parser จึงไม่สามารถปฏิเสธได้เพียงแต่มองเห็นเท่านั้น ใช้ตัวคั่นและเปลี่ยนสถานะเพื่อคาดหวังชื่อหรือค่าอื่น ความขัดแย้งจะเกิดขึ้นเฉพาะเมื่อ `}` หรือ `]` มาถึงแทน ตัวคั่นนั้นคือส่วนที่รายการที่สัญญาไว้พิสูจน์ได้ว่าไม่มีอยู่ แม้ว่าเครื่องหมายจุลภาคที่อยู่ข้างหน้าจะทำให้เกิดการเปลี่ยนแปลงสถานะก็ตาม
ตัวคั่นที่รายงานจึงเป็นหลักฐานเกี่ยวกับสถานะของตัวแยกวิเคราะห์ ไม่ใช่ข้อเสนอแนะให้ลบเครื่องหมายปีกกาหรือวงเล็บเหลี่ยม อ่านโทเค็นหนึ่งรายการทางด้านซ้าย หากโทเค็นนั้นเป็นเครื่องหมายจุลภาคและตัวคั่นปิดคอนเทนเนอร์เดียวกัน ให้ลบเครื่องหมายจุลภาคออกและคงการปิดไว้ เครื่องสแกนของ ToolAcre ตั้งชื่อเงื่อนไขด้วยเครื่องหมายจุลภาคต่อท้าย และระบุตำแหน่งต้นทางหลังจาก JSON.parse ปฏิเสธเอกสาร
JavaScript, Python และ linters สมัยใหม่อนุญาต JSON ไม่
JavaScript, Python และ linters สมัยใหม่อนุญาต JSON ไม่อนุญาต — ตัวอักษรภาษาต้นฉบับมักจะอนุญาตให้ใช้เครื่องหมายจุลภาคหลังรายการสุดท้าย เนื่องจากทำให้บรรทัดที่เรียงลำดับใหม่และการเพิ่มเติมในอนาคตง่ายต่อการตรวจสอบ ตัวจัดรูปแบบอาจแทรกหรือรักษาสไตล์นั้นไว้ได้ สิ่งอำนวยความสะดวกเหล่านั้นเป็นของไวยากรณ์แต่ละภาษา `.js` object literal หรือพจนานุกรม Python สามารถเป็นแหล่งที่ถูกต้องได้ ในขณะที่เครื่องหมายวรรคตอนเดียวกันที่มองเห็นได้ยังคงใช้ไม่ได้ในเอกสาร RFC 8259 JSON
โปรแกรมแก้ไขที่กำหนดค่าสำหรับ JavaScript อาจไม่แสดงคำเตือนเมื่อส่วนที่วางลงท้ายด้วยเครื่องหมายจุลภาค ตัวแยกวิเคราะห์ปลายทางยังคงควบคุมการยอมรับ ใช้โหมดภาษา JSON สำหรับข้อความ `.json` และตรวจสอบเพย์โหลดที่แน่นอนที่ส่งไปยัง API หรือฟิลด์การกำหนดค่า ความผ่อนปรนในไฟล์ต้นฉบับ linter หรือตัวแยกวิเคราะห์ JSON5 ไม่สามารถถ่ายโอนหลักฐานเกี่ยวกับผู้บริโภค JSON ที่เข้มงวดได้
ตัวอย่างการทำงาน: เครื่องหมายจุลภาคต่อท้ายสามตัวในไฟล์เดียว
ตัวอย่างการทำงาน: เครื่องหมายจุลภาคต่อท้ายสามตัวในไฟล์เดียว - สมมติว่า `features` ลงท้ายด้วย `"beta",` วัตถุที่มีวัตถุนั้นลงท้ายด้วย `"enabled": true,` และสมาชิกรูทตัวที่สองมีข้อผิดพลาดเดียวกัน การตรวจสอบความถูกต้องครั้งแรกจะหยุดที่วงเล็บปิดหลังจาก `beta` การนำเครื่องหมายจุลภาคออกจะทำให้การแยกวิเคราะห์ดำเนินต่อไปได้จนกระทั่งเครื่องหมายปีกกาปิดหลัง `true` และการซ่อมแซมตำแหน่งที่สองจะเผยให้เห็นข้อผิดพลาดของออบเจ็กต์ระดับรากที่เหลืออยู่
ลำดับนี้เป็นไปตามที่คาดไว้ เนื่องจากโดยทั่วไปแล้ว parsers จะรายงานจุดแรกที่การดำเนินการต่อเป็นไปไม่ได้ ไม่ใช่ทุกข้อบกพร่องในภายหลัง แมปแต่ละบรรทัดและคอลัมน์กับตัวคั่นปิด ตรวจสอบตัวคั่นที่อยู่ก่อนหน้าทันที ทำการเปลี่ยนแปลงโดยเจตนาและดำเนินการตรวจสอบอีกครั้ง อย่าลบเครื่องหมายจุลภาคทั้งหมดเป็นกลุ่ม: จำเป็นต้องมีตัวคั่นระหว่างเพื่อนบ้านจริง การตรวจสอบซ้ำจะแยกเครื่องหมายจุลภาคเทอร์มินัลที่ไม่ถูกต้องสามตัวออกจากเครื่องหมายจุลภาคที่ถูกต้องในเอกสารเดียวกัน
ตัวแปรที่ทำให้เกิดข้อผิดพลาดเดียวกัน
ตัวแปรที่ก่อให้เกิดข้อผิดพลาดเกี่ยวกับตัวคั่นที่เกี่ยวข้อง ได้แก่ เครื่องหมายจุลภาคนำหน้า เครื่องหมายจุลภาคสองตัวติดกัน และเครื่องหมายจุลภาคหลังค่ารูต ล้วนใช้อักขระเดียวกันในทางที่ผิด แต่ละเมิดสถานะของตัวแยกวิเคราะห์ที่ต่างกัน เครื่องหมายจุลภาคนำหน้าไม่มีรายการที่เสร็จสมบูรณ์ทางด้านซ้าย เครื่องหมายจุลภาคติดต่อกันไม่มีรายการระหว่างตัวคั่น เครื่องหมายจุลภาคหลังค่ารากทั้งหมดจะปรากฏขึ้นหลังจากข้อความ JSON ถึงจุดสิ้นสุดที่ถูกต้องแล้ว
กรณีเหล่านี้ไม่ควรมีป้ายกำกับเครื่องหมายจุลภาคต่อท้ายโดยอัตโนมัติ เหตุผลที่ชัดเจนขึ้นอยู่กับตำแหน่งและสถานะของคอนเทนเนอร์ ภายใน `{"a":1,,"b":2}` เครื่องหมายจุลภาคตัวที่สองเป็นสิ่งที่ไม่คาดคิดซึ่งชื่อสมาชิกที่ยกมาควรขึ้นต้น ใน `[ ,1]` เครื่องหมายจุลภาคแรกจะปรากฏขึ้นในตำแหน่งที่ต้องการค่า ตรวจสอบโทเค็นการวินิจฉัยและโทเค็นโดยรอบ แทนที่จะใช้กฎสากล "ลบเครื่องหมายจุลภาคก่อนหน้า" นอกรูปแบบตัวคั่นปิด
สิ่งนี้ไม่ครอบคลุมถึง
สิ่งนี้ไม่ครอบคลุม — JSON5 และเวิร์กโฟลว์ JSON-with-comments บางรายการจงใจอนุญาตให้ใช้เครื่องหมายจุลภาคต่อท้าย ไฟล์ที่เขียนสำหรับหนึ่งในไวยากรณ์เหล่านั้นควรใช้ตัวแยกวิเคราะห์ ส่วนขยาย และเครื่องมือที่ประกาศไว้ การรักษาแบบเข้มงวด JSON จะทำให้เกิดข้อผิดพลาดที่แสดงถึงรูปแบบที่ไม่ตรงกัน ไม่จำเป็นต้องเป็นข้อผิดพลาดในการเขียน ในทางกลับกัน การยอมรับด้วย parser ที่อนุญาตไม่ได้ทำให้แหล่งที่มาปลอดภัยในการส่งไปยังปลายทาง JSON ที่เข้มงวด
การเปลี่ยนพาร์เซอร์เพียงเพื่อปิดเสียงการวินิจฉัยนี้จะเปลี่ยนภาษาที่ยอมรับ และสามารถปกปิดความไม่เข้ากันกับผู้บริโภคในที่สุด ความคิดเห็น ชื่อที่ไม่มีเครื่องหมายคำพูด และสตริงที่มีเครื่องหมายคำพูดเดี่ยวอาจแสดงร่วมกับเครื่องหมายจุลภาคต่อท้ายในรูปแบบขยาย ทำให้เกิดความล้มเหลวเพิ่มเติมเมื่อข้อความข้ามขอบเขต ยืนยันสัญญาปลายทางก่อน หากมีข้อความว่า JSON ให้ลบไวยากรณ์ส่วนขยายออก หากมีข้อความว่า JSON5 หรือ JSONC ให้ตรวจสอบด้วยเครื่องมือที่ใช้รูปแบบที่ตรงกันทุกประการ
Takeaway: ดูโทเค็นหนึ่งรายการทางด้านซ้ายของตำแหน่งที่รายงาน
ประเด็นสำคัญ: ดูโทเค็นหนึ่งรายการทางด้านซ้ายของตำแหน่งที่รายงาน — เมื่อเครื่องหมายรูปหมวกอยู่ใต้ `}` หรือ `]` เครื่องหมายจุลภาคที่อยู่ข้างหน้าอาจสัญญาถึงสมาชิกหรือองค์ประกอบที่ไม่เคยมาถึง รักษาตัวคั่นการปิดที่จำเป็นเชิงโครงสร้างไว้ และลบเฉพาะตัวคั่นเทอร์มินัลนั้นออก จากนั้นตรวจสอบเอกสารทั้งหมดอีกครั้ง เนื่องจากตำแหน่งที่ซ่อมแซมครั้งแรกอาจเปิดเผยเครื่องหมายจุลภาคต่อท้ายในคอนเทนเนอร์ในภายหลัง
ToolAcre ทำให้ความรับผิดชอบแคบลง: JSON.parse ตัดสินใจว่าเอกสารไม่ถูกต้อง และเครื่องสแกนในเครื่องจะระบุเหตุผลเชิงโครงสร้างที่มั่นคง บวกกับบรรทัดและคอลัมน์หลังจากความล้มเหลว ใช้พิกัดนั้นเพื่อตรวจสอบบริบทของ parser แทนที่จะโทษอักขระที่เน้นสีแยกกัน เครื่องหมายจุลภาคต่อท้ายเป็นการแก้ไขหนึ่งอักขระ แต่การทำความเข้าใจว่าเหตุใดข้อผิดพลาดจึงปรากฏบนตัวคั่นต่อไปนี้ ทำให้การวินิจฉัยแบบเดียวกันนี้เชื่อถือได้สำหรับออบเจ็กต์ อาร์เรย์ และการกำหนดค่าที่ซ้อนกันแบบลึก