ไทย

เครื่องมือสำหรับนักพัฒนา · JSON ฟอร์แมตเตอร์ & เครื่องมือตรวจสอบความถูกต้อง

วิธีการทำงานของ JSON การพิมพ์แบบสวย: การเยื้อง ช่องว่าง และลำดับคีย์

· มันทำงานอย่างไร

json นักพัฒนาเวิร์กโฟลว์ การตรวจสอบ

วิธีการทำงานของ JSON การพิมพ์ที่สวยงาม: การเยื้อง ช่องว่าง และลำดับคีย์ที่แสดงด้วยโทเค็น JSON และขอบเขตการตรวจสอบที่แม่นยำ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

ข้อมูลเดียวกัน แต่รูปลักษณ์ที่แตกต่างกันสามแบบ

ข้อมูลเดียวกัน แต่รูปลักษณ์ที่แตกต่างกันสามแบบ - เพย์โหลด API ขนาดกะทัดรัดสามารถครอบคลุมหนึ่งบรรทัด ขยายด้วยช่องว่างสองช่องในแต่ละความลึก หรือขยายออกไปอีกด้วยสี่ช่อง วงเล็บปีกกา วงเล็บ ชื่อ และค่าต่างๆ อธิบายโครงสร้างการแยกวิเคราะห์ที่เหมือนกันในทุกเวอร์ชัน มีเพียงตัวแบ่งบรรทัดและระยะห่างระหว่างโทเค็นโครงสร้างเท่านั้นที่แตกต่างกัน ความแตกต่างนั้นมีความสำคัญเมื่อตรวจสอบเอาต์พุตของฟอร์แมตเตอร์: ส่วนต่างที่มากขึ้นไม่ใช่การเปลี่ยนแปลงข้อมูลโดยอัตโนมัติ เนื่องจากการเยื้องจงใจเปลี่ยนไบต์จำนวนมากในขณะที่ยังคงค่าผลลัพธ์ไว้เหมือนเดิม

ToolAcre เสนอช่องว่างสอง, สี่หรือแปดช่องและแท็บ จากนั้นส่งต่อการเยื้องที่เลือกไปที่ JSON.stringify บันทึกการใช้งานแบบซ้อนแบบสั้นทำให้การเปรียบเทียบมีความชัดเจน: ขอบเขตยังคงอยู่ในลำดับอาเรย์เดียวกัน บูลีนยังคงเป็นบูลีน และจำนวนการลองใหม่ยังคงเป็นตัวเลข

ช่องว่างใด JSON ถือว่าไม่มีนัยสำคัญ

ช่องว่างใด JSON ถือว่าไม่มีนัยสำคัญ — RFC 8259 อนุญาตให้มีช่องว่าง แท็บแนวนอน การป้อนบรรทัด และการขึ้นบรรทัดใหม่ก่อนหรือหลังอักขระโครงสร้าง ดังนั้นฟอร์แมตเตอร์อาจขึ้นบรรทัดใหม่หลัง `{` เว้นวรรคก่อนสมาชิกที่ซ้อนกัน และขึ้นบรรทัดใหม่ก่อน `}` โดยไม่ต้องเปลี่ยนค่า อย่างไรก็ตาม ช่องว่างนั้นไม่ได้ใช้แล้วทิ้งในระดับสากล เมื่อเครื่องหมายคำพูดคู่เปิดสตริง ทุกช่องว่างธรรมดาจะเป็นของเนื้อหาของสตริงนั้น และจะต้องคงอยู่ในรูปแบบข้อมูลทุกประการ

โมเดลทางจิตที่ปลอดภัยที่สุดคือการแยกขอบเขตโทเค็นออกจากเนื้อหาสตริง ระหว่างเครื่องหมายทวิภาคและตัวเลข ช่องว่างที่อนุญาตเพิ่มเติมคือการนำเสนอ ระหว่างตัวอักษรของข้อความที่ยกมาเป็นข้อมูล ToolAcre แยกวิเคราะห์แหล่งที่มาก่อนและทำให้ค่าผลลัพธ์เป็นอนุกรม ดังนั้น JSON.stringify จึงเลือกช่องว่างใหม่รอบๆ คอนเทนเนอร์ในขณะที่ยังคงรักษาอักขระสตริงที่ถอดรหัสไว้

วิธีใช้การตั้งค่าการเยื้อง

วิธีใช้การตั้งค่าการเยื้อง - แต่ละคอนเทนเนอร์ที่ซ้อนกันจะเพิ่มสำเนาของหน่วยการเยื้องที่เลือกหนึ่งชุด คุณสมบัติระดับบนสุดเริ่มต้นหนึ่งระดับใน; คุณสมบัติภายในวัตถุเริ่มต้นในสองระดับ; วัตถุภายในอาร์เรย์จะเพิ่มอีกระดับหนึ่ง วงเล็บปีกกาและวงเล็บปิดจะกลับไปที่การเยื้องของคอนเทนเนอร์ที่เป็นเจ้าของ ความกว้างจึงสะท้อนถึงความลึกของโครงสร้างมากกว่าความยาวของคีย์ ค่า หรือบรรทัดก่อนหน้า

การเว้นวรรคจะสร้างความกว้างของภาพที่คงที่ในตัวแก้ไขทุกตัว ในขณะที่แท็บช่วยให้ผู้ดูแต่ละคนเลือกได้ว่าจะให้แสดงระดับใดระดับหนึ่ง JavaScript ยังจำกัดการเยื้อง JSON.stringify ไว้ที่อักขระช่องว่าง 10 ตัวหรืออักขระ 10 ตัวแรกของสตริงที่ให้มา แม้ว่า ToolAcre จะแสดงเฉพาะค่าที่ตั้งล่วงหน้าที่ใช้งานได้จริงเท่านั้น

การจัดรูปแบบเปลี่ยนลำดับคีย์หรือไม่

การจัดรูปแบบเปลี่ยนลำดับคีย์หรือไม่ — การพิมพ์แบบธรรมดาไม่ได้จงใจจัดเรียงสมาชิกของอ็อบเจ็กต์ อ็อบเจ็กต์ JSON เป็นคอลเล็กชันที่ไม่เรียงลำดับตามแนวคิด แต่ JavaScript การแยกวิเคราะห์และการทำให้เป็นอนุกรมใช้กฎการแจงนับคุณสมบัติที่กำหนดไว้ คีย์ที่ไม่ใช่จำนวนเต็มส่วนใหญ่จะปรากฏในลำดับการป้อนข้อมูล ในขณะที่คีย์ที่มีลักษณะคล้ายจำนวนเต็มสามารถแสดงก่อนชื่ออื่นได้ ผู้บริโภคไม่ควรยึดถือความหมายทางธุรกิจกับตำแหน่งของสมาชิก แม้ว่าฟอร์แมตเตอร์จะดูเหมือนรักษาไว้อย่างสม่ำเสมอสำหรับวัตถุที่คุ้นเคยก็ตาม

ToolAcre แยกการเยื้องจากการเรียงลำดับ เมื่อปิดใช้งานการเรียงลำดับ จะทำให้ออบเจ็กต์ที่แยกวิเคราะห์เป็นอนุกรมโดยตรง เมื่อเปิดใช้งานการเรียงลำดับ ระบบจะสร้างออบเจ็กต์แบบวนซ้ำซึ่งมีคีย์ที่เรียงตามตัวอักษรก่อน JSON.stringify รัน; อาร์เรย์จะรักษาลำดับองค์ประกอบไว้เนื่องจากการเรียงลำดับอาร์เรย์ใหม่จะเปลี่ยนความหมายของอาร์เรย์ ตัวเลือกที่ชัดเจนนี้สร้างความแตกต่างที่ตรวจสอบได้: เอาต์พุตเฉพาะช่องว่างเท่านั้นมาจากการพิมพ์แบบสวย ในขณะที่ความแตกต่างของลำดับคีย์มาจากการขอองค์กรตามรูปแบบบัญญัติ

สิ่งที่ตัวจัดรูปแบบการแยกวิเคราะห์และจัดเรียงซ้ำสามารถเปลี่ยนแปลงได้

สิ่งที่ตัวจัดรูปแบบการแยกวิเคราะห์และจัดเรียงซ้ำสามารถเปลี่ยนแปลงได้ - ค่าที่แยกวิเคราะห์ยังคงอยู่ แต่การสะกดดั้งเดิมกลับไม่เปลี่ยนแปลง ตัวเลขที่เขียนเป็น `1.0` อาจส่งคืนเป็น `1` และ `1e3` อาจส่งคืนเป็น `1000` อักขระที่พิมพ์เป็น Escape สามารถปรากฏขึ้นอีกครั้งตามตัวอักษร ในขณะที่อักขระตามตัวอักษรอาจถูกหลีกเมื่อจำเป็นต้องทำให้เป็นอนุกรม ชื่ออ็อบเจ็กต์ที่ซ้ำกันได้ถูกยุบลงแล้วในระหว่างการแยกวิเคราะห์ ดังนั้นฟอร์แมตเตอร์จึงเหลือเพียงค่าคุณสมบัติสุดท้ายเท่านั้น

การแปลงเหล่านี้อธิบายว่าทำไมเอาต์พุตที่จัดรูปแบบแล้วจึงไม่ควรถือเป็นโปรแกรมแก้ไขเอกสารที่สงวนไบต์ เปรียบเทียบค่าที่แยกวิเคราะห์เมื่อเป้าหมายคือความเท่าเทียมกันทางความหมาย และตรวจสอบความแตกต่างของข้อความเมื่อสัญกรณ์ต้นฉบับมีความสำคัญต่อการลงนาม การแฮช หรือเวิร์กโฟลว์การตรวจสอบ จำนวนเต็มที่มีขนาดใหญ่มากสมควรได้รับการดูแลเป็นพิเศษ เนื่องจากตัวเลข JavaScript อาจสูญเสียความแม่นยำก่อนที่จะทำให้เป็นอนุกรม

ตัวอย่างการทำงาน: การจัดรูปแบบวัตถุที่ซ้อนกัน

ตัวอย่างการทำงาน: การจัดรูปแบบวัตถุที่ซ้อนกัน — เริ่มต้นด้วย `{"service":{"regions":["sg","us"],"retry":{"count":3}}}` และเลือกช่องว่างสองช่อง เครื่องหมายปีกกาเปิดจะตามด้วยการขึ้นบรรทัดใหม่ `service` ได้รับช่องว่างนำหน้า 2 ช่อง คุณสมบัติลูกได้รับ 4 ช่อง องค์ประกอบอาร์เรย์ได้รับ 6 ช่อง และคุณสมบัติ `count` ที่ซ้อนกันจะได้รับ 6 ช่องเช่นกัน เครื่องหมายจุลภาคแต่ละตัวจะลงท้ายสมาชิกที่แสดงผลหนึ่งตัว และตัวคั่นการปิดแต่ละตัวจะสอดคล้องกับระดับการเยื้องของคอนเทนเนอร์ที่เปิด

การสลับค่าเดียวกันเป็นแท็บจะเปลี่ยนเฉพาะคำนำหน้าที่ใช้สำหรับแต่ละระดับ การเปิดการเรียงลำดับคีย์สามารถวาง `regions` ก่อน `retry` เพิ่มเติมได้ แต่อาร์เรย์ยังคงอ่าน `sg` จากนั้น `us` การตรวจสอบที่มีประโยชน์จะตรวจสอบเอาต์พุตในสองรอบ: ขั้นแรกให้ยืนยันว่าการซ้อนและลำดับอาร์เรย์แสดงถึงค่าดั้งเดิม จากนั้นตัดสินใจว่าช่องว่างที่เลือกนั้นเหมาะสมกับพื้นที่เก็บข้อมูลหรือไม่

สิ่งนี้ไม่ครอบคลุมถึง

สิ่งนี้ไม่ครอบคลุมถึง การเรียงลำดับคีย์เป็นตัวเลือกการทำให้เป็นมาตรฐานแยกต่างหาก และการย่อขนาดเป็นการดำเนินการนำเสนอที่ตรงกันข้าม Pretty-printing ไม่เคยให้สิทธิ์ในการเรียงลำดับอาร์เรย์ใหม่ ตำแหน่งอาร์เรย์คือข้อมูล ดังนั้นการเปลี่ยนตำแหน่งจึงสามารถเปลี่ยนลำดับความสำคัญ ลำดับเวลา หรือพฤติกรรมของโปรแกรมได้ และการเยื้องไม่ได้ทำให้แหล่งที่มาที่ไม่ถูกต้องถูกต้องก่อนที่จะแยกวิเคราะห์ ความคิดเห็น เครื่องหมายจุลภาคต่อท้าย และค่า JavaScript เท่านั้นจะต้องได้รับการแก้ไขหรือจัดการโดยโปรแกรมแยกวิเคราะห์สำหรับรูปแบบที่แท้จริงก่อนที่ตัวจัดรูปแบบ JSON ที่เข้มงวดจะสามารถทำให้เป็นอนุกรมได้

รูปแบบ JSON ที่เป็นที่ยอมรับนั้นไปไกลกว่าการจัดรูปแบบทั่วไปโดยการกำหนดลำดับสมาชิกที่แน่นอน การสะกดตัวเลข และการ Escape เพื่อหาลายเซ็นหรือแฮชที่กำหนด ToolAcre ไม่ได้อ้างว่าใช้มาตรฐานการกำหนดรูปแบบมาตรฐานดังกล่าว สร้างเอาต์พุตภายในเบราว์เซอร์ที่อ่านได้โดยใช้ JSON.parse และ JSON.stringify พร้อมตัวเลือกการเรียงลำดับคีย์แบบเรียกซ้ำ

ประเด็นสำคัญ: การพิมพ์แบบสวย ๆ คือการเปลี่ยนแปลงช่องว่าง

ประเด็นสำคัญ: การพิมพ์แบบสวยเป็นการเปลี่ยนแปลงช่องว่าง — จุดประสงค์คือเพื่อแสดงโครงสร้างโดยไม่เปลี่ยนค่าที่แสดง ความกว้างของการเยื้องส่งผลต่อความสามารถในการอ่าน ตรวจสอบเสียงรบกวน และแบบแผนของท้องถิ่น ไม่ใช่ความถูกต้อง JSON ช่องว่างภายในสตริงยังคงเป็นข้อมูล ลำดับอาร์เรย์ยังคงมีนัยสำคัญ และการเรียงลำดับคีย์อ็อบเจ็กต์จำเป็นต้องมีตัวเลือกที่ชัดเจนแยกต่างหาก การจดจำขอบเขตเหล่านั้นทำให้ฟอร์แมตเตอร์ประเมินความแตกต่างได้ง่ายขึ้น และป้องกันไม่ให้สับสนระหว่างการเปลี่ยนแปลงรูปลักษณ์กับการแก้ไขความหมาย

เครื่องมือแยกวิเคราะห์และจัดเรียงซ้ำยังคงสามารถปรับตัวเลขให้เป็นมาตรฐานและหลีกเลี่ยงการสะกดได้ เนื่องจากเครื่องมือทำงานจากค่าแทนที่จะเป็นข้อความโทเค็นต้นฉบับ ตรวจสอบกรณีเหล่านี้เมื่อความเที่ยงตรงของคำศัพท์มีความสำคัญ และหลีกเลี่ยงการใช้เอาต์พุต Pretty ธรรมดาเป็นรูปแบบมาตรฐานสำหรับลายเซ็น สำหรับการกำหนดค่ารายวันและการตรวจสอบ API ให้เลือกการเยื้องที่ทีมของคุณใช้ ปล่อยให้การเรียงลำดับยกเว้นกรณีที่ต้องการ จัดรูปแบบในเครื่อง และตรวจสอบข้อความที่ปล่อยออกมา