เครื่องมือสำหรับนักพัฒนา · ตัวแปลงไวยากรณ์
การแปลง JSON ถึง XML: องค์ประกอบรูท อาร์เรย์ และชื่อแท็กไม่ถูกต้อง
· มันทำงานอย่างไร
json xml ข้อมูลรูปแบบ
JSON อาจเป็นอาร์เรย์เปล่าที่มีคีย์ที่ขึ้นต้นด้วยตัวเลขหรือมีช่องว่าง ซึ่ง XML ไม่อนุญาต โพสต์นี้อธิบายการตัดสินใจที่ตัวแปลงต้องทำเกี่ยวกับรูท อาร์เรย์ และชื่อ เพื่อให้คุณสามารถคาดเดาเอาต์พุตได้
อาร์เรย์ที่ไม่มีชื่อ — อาร์เรย์ JSON ระดับบนสุดที่ต้องกลายเป็นเอกสาร XML แบบรูทเดียว และองค์ประกอบ wrapper ที่ปรากฏขึ้น
JSON สามารถเริ่มต้นด้วย `[1,2]`; XML ไม่สามารถเริ่มต้นด้วยองค์ประกอบเอกสารเพียร์สองรายการ ToolAcre จึงล้อมอาร์เรย์รูทในชื่อรูทที่เลือกและเขียนสมาชิกแต่ละคนเป็น `<item>` ลูกที่ซ้ำกัน คำเตือนตั้งชื่อแบบแผนนั้น เนื่องจากชื่อ wrapper และรายการไม่ปรากฏในแหล่งที่มา
การเลือก `numbers` จะทำให้ได้องค์ประกอบเอกสาร `<numbers>` หนึ่งรายการที่มีองค์ประกอบรายการสองรายการ การแปลงนั้นถูกกำหนดไว้ แต่ไม่ใช่แบบบัญญัติ: ระบบอื่นอาจต้องการ `<number>` หรือคอลเล็กชันที่มีแอตทริบิวต์ จงใจตั้งค่ารูทและเปรียบเทียบผลลัพธ์กับสัญญา XML ที่ผู้รับต้องการ
XML ต้องการหนึ่งรูทพอดี — เพราะเหตุใดทุก Conversion จึงประดิษฐ์หรือขอชื่อองค์ประกอบรูท
เอกสาร XML ต้องมีองค์ประกอบรากเดียวเท่านั้น ออบเจ็กต์ JSON ที่มีคีย์ระดับบนสุดธรรมดาเพียงคีย์เดียวสามารถใช้คีย์นั้นได้โดยตรง ออบเจ็กต์แบบหลายคีย์ อาร์เรย์ สเกลาร์ หรือ null ไม่มีชื่อที่ให้มาเพียงชื่อเดียว ดังนั้นผู้เขียนจึงปิดล้อมไว้ใน `root` เว้นแต่ผู้ใช้จะระบุชื่อตามกฎหมายอื่น
กฎ wrapper ถูกนำมาใช้ก่อนการทำให้เป็นอนุกรมและปรากฏเป็นคำเตือน ไม่ถูกค้นพบโดยสคีมาและไม่ได้อ้างว่า `<root>` มีความหมายต่อบริการเดิม การตั้งชื่อซองจดหมายเป็นส่วนหนึ่งของการออกแบบบูรณาการ ในขณะที่ตัวแปลงรับประกันเฉพาะโครงสร้างที่มีรูปแบบที่ดีภายใต้การแมปของตัวเองเท่านั้น
อาร์เรย์ไม่มี XML ที่เทียบเท่ากัน — การทำซ้ำองค์ประกอบต่อรายการ และวิธีการแสดงอาร์เรย์ของสเกลาร์และอาร์เรย์ของอาร์เรย์
อาร์เรย์กลายเป็นองค์ประกอบที่ซ้ำกัน ที่รูทเอกสาร สมาชิกใช้ `<item>` ใต้ wrapper ภายในวัตถุ อาร์เรย์ที่เก็บไว้ภายใต้ `line` จะกลายเป็นพี่น้อง `<line>` ซ้ำ อาร์เรย์ของวัตถุสร้างองค์ประกอบซ้ำกับฟิลด์ลูก อาร์เรย์ที่ซ้อนกันไม่มีชื่อโดเมนและสืบทอดโครงสร้างทั่วไปที่สร้างโดยผู้สร้าง
สิ่งนี้จะสูญเสียความแตกต่างระหว่างสมาชิกอาร์เรย์หนึ่งตัวและสเกลาร์ที่มีชื่อองค์ประกอบเดียวกันหลังจากอ่าน XML-to-JSON ในภายหลัง XML จัดให้มีเหตุการณ์ ไม่ใช่เครื่องหมายอาร์เรย์อิสระ หากจำนวนสมาชิกที่เสถียรมีความสำคัญ สกีมาหรือการแม็ปแอปพลิเคชันจะต้องจัดเตรียมให้ ตัวซีเรียลไลเซอร์ทั่วไปไม่สามารถพิสูจน์ได้จากชื่อองค์ประกอบที่มีรูปทรง JSON เพียงอย่างเดียว
คีย์ที่ไม่สามารถเป็นชื่อองค์ประกอบได้ — ชื่อที่ขึ้นต้นด้วยตัวเลข มีการเว้นวรรคหรือเครื่องหมายวรรคตอน หรือขึ้นต้นด้วย 'xml' และวิธีที่ผู้แปลงเปลี่ยนชื่อหรือหลีกเลี่ยง
โครงร่างที่แนะนำตัวแปลงอาจเปลี่ยนชื่อหรือหลีกเลี่ยงคีย์ที่ผิดกฎหมาย ToolAcre ปฏิเสธอย่างชัดเจน คีย์ที่มีการเว้นวรรค คีย์เริ่มต้นด้วยตัวเลขหรือยัติภังค์ หรือคีย์ที่ขึ้นต้นด้วยตัวอักษรสงวน `xml` จะเรียก `UNSUPPORTED_SHAPE` และตั้งชื่อเส้นทางที่ละเมิด การเปลี่ยนชื่อโดยไม่โต้ตอบจะสร้าง XML ที่ตรงกับสคีมาที่ไม่ตกลงกัน
ชื่อที่ถูกต้องอาจขึ้นต้นด้วยตัวอักษร ขีดล่าง หรือคำนำหน้าแบบเนมสเปซ และอาจมีตัวเลข จุด ขีดล่าง เครื่องหมายทวิภาค และยัติภังค์หลังเริ่มต้น คีย์แอตทริบิวต์ใช้ `@` เป็นแบบแผน JSON เท่านั้น ชื่อแอตทริบิวต์ที่เหลือจะต้องผ่านการตรวจสอบเดียวกัน เปลี่ยนชื่อซอร์สคีย์โดยเจตนาหรือเลือกรูปแบบเป้าหมายอื่น
คีย์ที่ไม่สามารถเป็นชื่อองค์ประกอบจะถูกปฏิเสธ ไม่เคยเปลี่ยนชื่อหรือเป็น Escape
ตัวเลขและบูลีนถูกทำให้เป็นอนุกรมเป็นข้อความองค์ประกอบ ดังนั้นประเภท JSON จะไม่ถูกประกาศโดย XML อีกต่อไป เครื่องอ่านย้อนกลับเริ่มต้นจึงส่งคืนสตริง Null ไม่มีการเป็นตัวแทน XML ที่นี่: มันจะกลายเป็นองค์ประกอบว่าง ซึ่งแยกไม่ออกจากสตริงว่าง และผู้เขียนรายงานจำนวนค่าที่ได้รับการเปลี่ยนแปลงนั้น
ซึ่งหมายความว่า `{ "a": null, "b": "" }` สามารถสร้างองค์ประกอบว่างสององค์ประกอบที่อ่านกลับเหมือนกัน การเรียกการเดินทางไปกลับแบบไม่สูญเสียจะเป็นเท็จ แอ็ตทริบิวต์ `#text` และ `#cdata` จะรักษาแบบแผนโครงสร้างของตัวแปลง แต่ไม่ได้เพิ่มระบบประเภท XML ทั่วไป
ประเภทกลายเป็นข้อความ XML ในขณะที่ null กลายเป็นความกำกวมขององค์ประกอบว่างที่ยอมรับได้
ใช้ `{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}` คีย์ `order` คีย์เดียวจะกลายเป็นรูท `@id` กลายเป็นแอตทริบิวต์ แต่ละออบเจ็กต์บรรทัดจะกลายเป็น `<line>` ที่ซ้ำกัน และค่า null จะกลายเป็น `<note></note>` ว่างพร้อมคำเตือน
อ่านเอาต์พุตกลับโดยปิดใช้งานการอนุมาน รหัสแอตทริบิวต์ ปริมาณ และค่าข้อความเป็นสตริง และบรรทัดเป็นอาร์เรย์เนื่องจากปรากฏสองครั้ง สิ่งนี้แสดงให้เห็นถึงการผกผันที่ได้รับการสนับสนุนอย่างแน่นอนในขณะที่เปิดเผยประเภทว่างและตัวเลขที่หายไป สคีมาการรับคำสั่งซื้ออาจต้องการชื่อหรือการสั่งซื้ออื่น ซึ่งตัวอย่างนี้ไม่สามารถตรวจสอบได้
สิ่งนี้ไม่ครอบคลุมถึง — การสร้าง XML ที่ตรงกับ XSD หรือเนมสเปซที่กำหนด ซึ่งจำเป็นต้องมีการแมปที่เขียนด้วยมือ
ผู้เขียนไม่ได้ใช้ XSD กำหนด URI เนมสเปซ หรือตัดสินใจลำดับองค์ประกอบจากสคีมาธุรกิจ มันเขียนการประกาศ XML และไม่เคยส่งเสียง DOCTYPE คีย์ที่มีคำนำหน้าเนมสเปซจะถูกรักษาไว้ตามตัวอักษร แต่นั่นไม่ใช่การแก้ไขเนมสเปซหรือการพิสูจน์ว่ามีการประกาศคำนำหน้าอย่างถูกต้อง
การสร้าง XML ที่ยอมรับโดยบริการเฉพาะอาจต้องใช้แอตทริบิวต์ ข้อจำกัดของลำดับ กลุ่มตัวเลือก และชื่อที่ผ่านการรับรอง ใช้สคีมาหรือเอกสารประกอบปัจจุบันเพื่อสร้างการแมปนั้น การแปลงแบบทั่วไปเหมาะสำหรับการตรวจสอบและเอกสารที่เน้นข้อมูลเป็นหลัก ไม่สามารถใช้แทนการซีเรียลไลซ์ตามสัญญาได้
ประเด็นสำคัญ: ทำนายรูปร่างก่อนที่คุณจะพึ่งพามัน - และวิธีที่แผงตัวแปลงไวยากรณ์แสดงโครงสร้าง XML ที่เอกสาร JSON สร้างขึ้น
ทำนายเอนเวโลป ชื่อรายการ และประเภทที่สูญเสียไปก่อน ขึ้นอยู่กับผลลัพธ์ ToolAcre ตัดค่าที่ขาดหนึ่งรูต ทำซ้ำอาร์เรย์ แมปคีย์ `@` กับแอตทริบิวต์ แทนที่ null ด้วยข้อความว่าง และปฏิเสธชื่อที่ไม่ถูกต้องแทนที่จะคาดเดาการแทนที่ การเปลี่ยนแปลงที่ไม่ชัดเจนทั้งหมดจะปรากฏในเอาต์พุตหรือคำเตือน
ทดสอบออบเจ็กต์ที่เล็กที่สุดซึ่งรวมถึงอาร์เรย์ระดับบนสุด ระเบียนที่ซ้ำกัน ข้อความว่าง ข้อความตัวเลข และคีย์ที่น่าอึดอัดใจ การปฏิเสธเป็นหลักฐานที่เป็นประโยชน์ว่าจำเป็นต้องมีการทำแผนที่ด้วยตนเอง ไฟล์ที่ประสบความสำเร็จยังคงต้องการการตรวจสอบความถูกต้องโดยผู้รับจริง เนื่องจากการอ้างสิทธิ์ที่มีรูปแบบถูกต้อง XML และ XML ที่มีรูปแบบที่ถูกต้องสคีมานั้นแตกต่างกัน
หลังจากที่ผู้รับยอมรับตัวอย่างแล้ว ให้เพิ่มการตรวจสอบย้อนกลับเฉพาะในกรณีที่คาดว่าการทำแผนที่จะยังคงอยู่ คุณลักษณะและรายการลูกที่ซ้ำกันสามารถเดินทางไปกลับได้ภายใต้แบบแผนของ ToolAcre ในขณะที่ประเภท null และสเกลาร์ไม่สามารถทำได้ การบันทึกความแตกต่างดังกล่าวจะป้องกันไม่ให้มีการนำตัวอย่างเส้นทางแห่งความสุขที่ประสบความสำเร็จไปใช้กับเอกสารคำสั่งซื้อทุกฉบับที่การบูรณาการของคุณอาจสร้างขึ้น