ไทย

ตัวแปลงไวยากรณ์ทำอะไร

JSON, YAML, XML, TOML และ CSV ไม่ได้ถือสิ่งเดียวกัน หน้านี้ระบุอย่างชัดเจนถึงวิธีการแมปแต่ละรูปร่าง Conversion ใดที่สูญเสียไป และสิ่งที่เครื่องมือปฏิเสธที่จะทำ

มันแปลงอะไร

Conversion โดยตรงเก้ารายการ: JSON ถึง YAML, YAML ถึง JSON, JSON ถึง XML, XML ถึง JSON, JSON ถึง TOML, TOML ถึง JSON, YAML ถึง TOML, TOML ถึง YAML และ JSON ถึง CSV ทุกอันทำงานในแท็บเบราว์เซอร์ของคุณ ไม่มีอะไรถูกอัพโหลด

การแปลงแต่ละรายการทำงานในลักษณะเดียวกันภายใน: เอกสารต้นฉบับจะถูกอ่านเป็นค่า JavaScript ธรรมดา และค่านั้นจะถูกเขียนออกมาในรูปแบบเป้าหมาย YAML ถึง TOML ไม่ใช่กรณีพิเศษ แต่เป็นผู้อ่าน YAML ตามด้วยผู้เขียน TOML นั่นคือเหตุผลที่คำเตือนด้านล่างถูกระบุต่อรูปแบบมากกว่าต่อคู่ - ข้อแม้เกี่ยวกับ TOML วันที่และเวลาจะมีผลในทุกที่ที่ TOML ปรากฏ

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

XML: คุณลักษณะ อาร์เรย์ และกฎที่เราเลือก

XML ไม่มีการแมป JSON ตามรูปแบบบัญญัติ ดังนั้นจึงต้องเลือกแบบแผน สิ่งเหล่านี้จะปรากฏบนหน้าจอเมื่อใดก็ตามที่ XML เป็นหนึ่งในสองรูปแบบ และเป็นสิ่งเหล่านี้

คุณลักษณะกลายเป็นคีย์วัตถุที่นำหน้าด้วย @ <user id="7"><name>เอด้า</name></user> อ่านว่า {"user":{"@id":7">"ชื่อ": "Ada"}} คำนำหน้าคือสิ่งที่ทำให้แอตทริบิวต์และองค์ประกอบลูกที่มีชื่อเดียวกันไม่ยุบรวมเป็นคีย์เดียว — <user id="7"><id>อื่น</id></user> เก็บทั้งสองอย่าง

ข้อความภายในองค์ประกอบที่มีแอตทริบิวต์หรือองค์ประกอบลูกอยู่ภายใต้คีย์ #text องค์ประกอบที่ไม่มีอะไรเลยนอกจากข้อความจะยุบลงในข้อความนั้น ส่วน CDATA อยู่ภายใต้ #cdata ดังนั้นเนื้อหาจึงเป็นข้อมูลที่มองเห็นได้ชัดเจนแทนที่จะเป็นมาร์กอัป

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

คำนำหน้าเนมสเปซจะถูกเก็บแบบคำต่อคำ: <ns:item> คือคีย์ ns:item และ xmlns:ns คือแอตทริบิวต์ @xmlns:ns ไม่มีสิ่งใดได้รับการแก้ไข เขียนใหม่ หรือตัดออก เนื่องจากการแก้ไขคำนำหน้าจะทำให้ข้อความในเอกสารที่มีอยู่จริงหายไป

แท็กปิดตัวเองอ่านเป็นสตริงว่าง การประกาศ XML คำแนะนำในการประมวลผล และความคิดเห็นถูกยกเลิก ในทางกลับกัน เครื่องมือจะเขียนประกาศของตัวเองและไม่เคยเป็น DOCTYPE

การเขียน XML ซึ่งเป็นคีย์ที่ไม่ใช่ชื่อองค์ประกอบ XML ตามกฎหมาย — อันที่มีการเว้นวรรค, อันหนึ่งขึ้นต้นด้วยตัวเลข, อันหนึ่งขึ้นต้นด้วยตัวอักษร xml — ถูกปฏิเสธด้วยชื่อแทนที่จะเขียนใหม่อย่างเงียบๆ องค์ประกอบที่เปลี่ยนชื่ออย่างเงียบๆ จะสร้างเอกสารที่ตรวจสอบกับสิ่งใดๆ

หน่วยงานภายนอกถูกปฏิเสธ ไม่ใช่แค่ปิดการใช้งานเท่านั้น

เอกสาร XML อาจประกาศเอนทิตีใน DOCTYPE โปรแกรมแยกวิเคราะห์ที่ขยายช่องโหว่เหล่านี้คือช่องโหว่ XXE: เอนทิตีที่ประกาศว่า SYSTEM "file:///etc/passwd" อ่านไฟล์ในเครื่อง โดยไฟล์หนึ่งชี้ไปที่ URL ส่งคำขอให้ผู้โจมตีควบคุม และสายโซ่ของเอนทิตีภายในคือการปฏิเสธบริการ "พันล้านหัวเราะ" ที่เปลี่ยนไม่กี่ร้อยไบต์เป็นกิกะไบต์

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

ต้นทุนจริง: เอกสารที่มี DOCTYPE จะไม่แปลงที่นี่แม้ว่าจะไม่เป็นอันตรายก็ตาม ลบ DOCTYPE หากเนื้อหาเป็นของคุณ

TOML วันที่และเวลาไม่เทียบเท่ากับที่อื่น

TOML 1.0 มีสี่ประเภทชั่วคราวและ JSON, YAML และ XML ไม่มี: วันที่ออฟเซ็ต-เวลา (1979-05-27T07:32:00Z), วันที่-เวลาท้องถิ่น (1979-05-27T07:32:00 โดยไม่มีโซน จงใจ) วันที่ท้องถิ่น (1979-05-27) และเวลาท้องถิ่น (07:32:00)

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

การแปลงกลับจะสร้างสตริงที่มีเครื่องหมายคำพูด ไม่ใช่วันที่และเวลา การไปกลับ TOML ถึง JSON ถึง TOML ดังนั้นการเปลี่ยนประเภทของค่าเหล่านั้น ไม่มีทางแก้ไขสิ่งนี้ได้หากไม่สร้างแบบแผนที่เครื่องมือรับจะต้องแบ่งปัน และการประดิษฐ์แบบเงียบ ๆ จะแย่กว่านั้น

TOML จำนวนเต็มลงนามแล้ว 64-bit; JSON หมายเลขคือ IEEE-754 คู่ จำนวนเต็มที่ผ่านมา 2^53 - 1 จะกลายเป็นสตริง โดยมีชื่อเส้นทางอยู่ในคำเตือน แทนที่จะสูญเสียตัวเลขหลักสุดท้ายไปเป็นการปัดเศษที่คุณจะไม่สังเกตเห็น

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

YAML: จุดยึด ลำธาร และปัญหานอร์เวย์

YAML ถูกอ่านด้วยสคีมาแบบจำกัดที่สามารถสร้างเฉพาะสตริง ตัวเลข บูลีน ค่าว่าง รายการ และแผนที่ แท็กที่สร้างวัตถุที่กำหนดเอง — !!js/function, !!python/object/apply, !!binary — ถูกปฏิเสธ ซึ่งเป็นเหตุผลทั้งหมดที่มีข้อจำกัดอยู่ ตัวโหลดที่ให้เกียรติพวกเขาคือตัวสร้างวัตถุที่กำหนดเองโดยสวมเสื้อผ้าของไฟล์กำหนดค่า

จุดยึดและนามแฝงได้รับการแก้ไขเป็นข้อมูลที่ซ้ำกัน เอกสารที่ขยายเกินล้านค่าเมื่อมีการติดตามนามแฝงจะถูกปฏิเสธ แทนที่จะอนุญาตให้ตรึงแท็บ นามแฝงแบบเรียกซ้ำจะถูกปฏิเสธทันที เนื่องจากไม่มีรูปแบบอื่นที่นี่ที่สามารถแสดงวงจรได้

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

YAML ห้ามใช้คีย์การแมปซ้ำ และผู้แยกวิเคราะห์ทุกรายจะจัดการคีย์ที่แตกต่างกัน เครื่องมือนี้จะเก็บค่าสุดท้าย — กฎ JSON.parse ใช้ — และบอกคุณว่ามันเกิดขึ้นพร้อมกับตำแหน่งของการทำซ้ำ การละทิ้งเอกสารอย่างเงียบๆ จะแย่กว่านั้น การเลือกค่าอย่างเงียบๆ โดยไม่บอกกล่าวจะแย่กว่านั้นอีก

ปัญหาของนอร์เวย์: ใน YAML 1.1 สเกลาร์ที่ไม่มีเครื่องหมายคำพูด y, ใช่, เปิด, ไม่ใช่, ปิด และรหัสประเทศ NO ทั้งหมดจะแปลงเป็นบูลีน ซึ่งเป็นวิธีที่รายการรหัสประเทศเปลี่ยนเป็นรายการความจริงและเท็จ เครื่องมือนี้อ่านว่า YAML 1.2 โดยที่เฉพาะจริงและเท็จเท่านั้นที่เป็นบูลีน ดังนั้น NO จะเป็นสตริง NO เมื่อมันเขียน YAML มันจะเสนอราคาทุกสตริงที่ตัวแยกวิเคราะห์ 1.1 จะอ่านผิด — 'NO', 'yes', 'on', '1.0', '0755', '2001-12-14' — ดังนั้นเอาต์พุตจึงปลอดภัยที่จะป้อนไปยังเครื่องมือที่ไม่ได้ย้ายไปที่ 1.2 ซึ่งต้องใช้เครื่องหมายคำพูดเพียงไม่กี่ตัวและซื้อความถูกต้อง

สตริงที่ดูเหมือนตัวเลขจะเก็บเครื่องหมายคำพูดไว้ด้วยเหตุผลเดียวกัน: "0755" ยังคงเป็นสตริง แทนที่จะกลายเป็น 755 และ "1.0" ยังคงเป็นสตริง แทนที่จะกลายเป็น 1

ความคิดเห็นหายไปทุกทิศทุกทาง JSON, CSV และคนอื่นๆ ไม่มีที่จะวางไว้ และไม่มีทางเดาได้ว่าพวกเขาควรจะกลับไปที่ไหน

JSON ถึง CSV: แบนราบและเครื่องหมายอะพอสทรอฟี่ที่หยุดสูตร

อาร์เรย์จะกลายเป็นแถว หนึ่งระเบียนต่อองค์ประกอบ ออบเจ็กต์ที่มีคุณสมบัติเดียวที่เก็บอาร์เรย์จะใช้อาร์เรย์นั้นเป็นแถว เนื่องจาก {"users": [ ... ]} เป็นตารางที่มีป้ายกำกับอย่างท่วมท้น และการแปลงก็บอกออกมาดัง ๆ ว่าเป็นเช่นนั้น วัตถุอื่นใดที่เป็นแถวเดียว สตริงเปล่า ตัวเลข หรือค่าว่างถูกปฏิเสธ: สี่เหลี่ยมผืนผ้าจำเป็นต้องมีบันทึก

อ็อบเจ็กต์และอาร์เรย์ที่ซ้อนกันจะถูกทำให้เป็นชื่อคอลัมน์แบบจุด โดยมีจุดสำหรับทั้งคีย์อ็อบเจ็กต์และดัชนีอาร์เรย์: address.city, tags.0, tags.1 หนึ่งตัวแยก หนึ่งกฎ คีย์ที่มีจุดอยู่แล้วจะทำให้ชื่อคอลัมน์คลุมเครือด้วยเส้นทางที่ซ้อนกัน เครื่องมือนี้จะเตือนแทนที่จะสร้างแผนการหลบหนีที่ไม่มีสเปรดชีตจะเข้าใจ

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

การอ้างอิงดังต่อไปนี้ RFC 4180: ช่องที่มีตัวคั่น เครื่องหมายคำพูดคู่ CR หรือ LF จะถูกปิดล้อมด้วยเครื่องหมายคำพูดคู่ และเครื่องหมายคำพูดแบบฝังจะถูกเขียนสองครั้ง บันทึกจะถูกคั่นด้วย CRLF ช่องที่มีช่องว่างนำหน้าหรือต่อท้ายก็ถูกยกมาด้วย เนื่องจากสเปรดชีตจะตัดช่องเหล่านั้นโดยไม่แจ้งให้ทราบ Unicode ส่งผ่านโดยไม่มีการเปลี่ยนแปลง และสามารถใส่เครื่องหมายลำดับไบต์นำหน้าสำหรับสเปรดชีตที่ต้องการเครื่องหมายเพื่ออ่าน UTF-8

สูตรฉีดคือตัวที่กัด เซลล์ที่ขึ้นต้นด้วย =, +, -, @, แท็บหรือตัวขึ้นบรรทัดใหม่จะถูกดำเนินการเป็นสูตรโดย Excel, LibreOffice Calc และ Google Sheets ทันทีที่เปิดไฟล์ =cmd|'/c calc'!A1 เป็นการสาธิตที่ทุกคนเสนอราคา; =IMPORTXML(...) คืออันที่ส่งชีตไปที่ไหนสักแห่งอย่างเงียบ ๆ ตัวแปลงที่เขียนสตริงแบบคำต่อคำได้เปลี่ยนข้อมูลของคุณเป็นการเรียกใช้โค้ดของผู้อื่นในไฟล์ที่ดูเฉื่อย

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

CSV ไม่สามารถบอกสตริงว่างจากค่าว่างได้ ทั้งสองกลายเป็นเซลล์ว่าง และการแปลงจะนับค่าว่างเพื่อให้คุณรู้ว่ามันเกิดขึ้น

ขีดจำกัดและจะเกิดอะไรขึ้นเมื่อคุณแตะขีดจำกัดหนึ่ง

ทุกรูปแบบมีการจำกัดจำนวนอักขระ ซึ่งจะบังคับใช้ก่อนที่จะดาวน์โหลดพาร์เซอร์ด้วยซ้ำ: 8 ล้านสำหรับ JSON, 4 ล้านสำหรับ XML และสำหรับ CSV แหล่งที่มา 2 ล้านสำหรับ YAML และ TOML นอกเหนือจากนั้นเครื่องมือจะปฏิเสธด้วยจำนวนที่แน่นอน แทนที่จะกลายเป็นแท็บที่ไม่ตอบสนองซึ่งจะทำให้สิ่งที่คุณวางหายไป

เอาต์พุต CSV ยังถูกจำกัดเพิ่มเติมที่ 100,000 แถวและ 2,000 คอลัมน์ เนื่องจากอาร์เรย์ที่ซ้อนกันแบบลึกจะแยกออกเป็นหนึ่งคอลัมน์ต่อองค์ประกอบ และ JSON สองสามเมกะไบต์สามารถกลายเป็นตารางที่ไม่มีสเปรดชีตใดที่จะเปิดได้

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

ตัวแยกวิเคราะห์จะถูกดาวน์โหลดเฉพาะเมื่อต้องการการแปลงเท่านั้น การเปิดชุดเครื่องมือเพื่อถอดรหัส JWT จะไม่ดึงข้อมูลใดๆ เลย

จะเกิดอะไรขึ้นกับสิ่งที่คุณวาง

  • ทุกการแปลง แฮช ถอดรหัส และส่วนต่างจะทำงานในแท็บเบราว์เซอร์ของคุณ ไม่มีการอัปโหลด บันทึก หรือจัดเก็บอินพุตบนเซิร์ฟเวอร์ เนื่องจากไม่มีเซิร์ฟเวอร์ที่เกี่ยวข้องเมื่อโหลดเพจแล้ว
  • แฮชมาจากการใช้งาน Web Crypto ของเบราว์เซอร์เอง และ UUID จากตัวสร้างแบบสุ่มที่ปลอดภัยด้วยการเข้ารหัส ไม่เกี่ยวข้องกับการโทรผ่านเครือข่าย
  • ไม่มีสิ่งใดที่คุณพิมพ์ถูกเขียนลงในที่จัดเก็บในตัวเครื่องหรือคุกกี้ การโหลดหน้าซ้ำจะทิ้งหน้านั้นไป การปิดแท็บจะทิ้งมันไป
  • การวิเคราะห์ทั่วทั้งไซต์ทำงานบนโฮสต์การผลิตตามรูปแบบบัญญัติที่กำหนดค่าไว้เท่านั้น และได้รับการเปิดเผยในนโยบายความเป็นส่วนตัว โฮสต์ในท้องถิ่นและโฮสต์ตัวอย่างปฏิเสธ ค่าที่วาง โทเค็น URL และเนื้อหาไฟล์จะไม่รวมอยู่ในเหตุการณ์การวิเคราะห์ของ ToolAcre เอง การโฆษณาถูกปิดใช้งานในการกำหนดค่าปัจจุบัน
  • ที่กล่าวว่า: คีย์ JWT หรือ API เป็นข้อมูลประจำตัวที่ใช้งานอยู่ นิสัยที่ปลอดภัยคืออย่าวางสิ่งใดสิ่งหนึ่งลงในหน้าเว็บที่คุณไม่ได้เขียน ไม่ว่าคำกล่าวอ้างนั้นจะน่าเชื่อถือเพียงใด รวมถึงหน้านี้ด้วย

คำถาม

เหตุใดเอกสาร XML ของฉันจึงล้มเหลวด้วยข้อความ "ประกาศ DOCTYPE"

เนื่องจากมีการประกาศประเภทเอกสาร และตัวแปลงนี้จะปฏิเสธทุกรายการ แทนที่จะเชื่อถือการตั้งค่า parser เพื่อจัดการเอนทิตีอย่างปลอดภัย ลบ DOCTYPE หากเนื้อหาเป็นของคุณ ไม่มีตัวเลือกที่จะอนุญาต

เหตุใด TOML datetime ของฉันจึงกลับมาเป็นสตริงที่ยกมา

เนื่องจาก JSON, YAML และ XML ไม่มีประเภทวันที่ วันที่และเวลาถูกแปลงเป็นข้อความ RFC 3339 ที่เขียนไว้ ซึ่งเป็นสตริงในรูปแบบอื่น ๆ การแปลงกลับจะสร้างสตริง และเครื่องมือจะเตือนคุณทันทีที่มันเกิดขึ้น แทนที่จะแจ้งให้คุณทราบในภายหลัง

เหตุใดเซลล์ CSV เซลล์ใดเซลล์หนึ่งของฉันจึงขึ้นต้นด้วยเครื่องหมายอะพอสทรอฟี

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

เหตุใดองค์ประกอบ XML ที่ซ้ำกันเพียงรายการเดียวจึงไม่ใช่อาร์เรย์

เนื่องจาก XML ไม่มีวิธีแยกแยะรายการหนึ่งจากค่าเดียว ทั้งสองเขียนเหมือนกัน การคาดเดาไปในทิศทางใดทิศทางหนึ่งจะผิดครึ่งหนึ่ง ดังนั้นเครื่องมือจะรายงานสิ่งที่มีอยู่จริง

ฉันสามารถแปลง CSV กลับเป็น JSON ที่นี่ได้หรือไม่

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

เหตุใด "NO" จึงไม่แปลงเป็นเท็จ

เนื่องจากพฤติกรรมนั้นเป็นของ YAML 1.1 และเครื่องมือนี้อ่าน YAML 1.2 โดยที่เฉพาะจริงและเท็จเท่านั้นที่เป็นบูลีน พฤติกรรม 1.1 คือเหตุผลที่รหัสประเทศของนอร์เวย์เป็นเรื่องตลกในการจัดการการกำหนดค่า เมื่อเครื่องมือเขียน YAML มันจะเสนอราคาสตริงดังกล่าว ดังนั้น 1.1 parser downstream ไม่สามารถอ่านผิดได้เช่นกัน

ข้อจำกัด

  • CSV เขียนขึ้น ไม่เคยอ่าน ไม่มีการแปลง CSV ถึง JSON ที่นี่ ตามตัวเลือก
  • ความเห็นก็หายไปทุกทิศทุกทางทุกรูปแบบที่มี
  • TOML datetime กลายเป็นสตริงในรูปแบบอื่น ๆ ดังนั้น TOML ไปกลับจะเปลี่ยนประเภทเหล่านั้น ไม่มีหนทางไหนที่ไม่ขาดทุน
  • เอกสาร XML ที่มี DOCTYPE ถูกปฏิเสธโดยสิ้นเชิง รวมถึงเอกสารที่ไม่เป็นอันตรายด้วย และการปฏิเสธไม่สามารถปิดได้
  • องค์ประกอบ XML ที่ทำซ้ำรายการเดียวไม่สามารถแยกความแตกต่างจากองค์ประกอบที่ไม่ซ้ำได้ ดังนั้น XML ถึง JSON ถึง XML จึงไม่ส่งคืนรูปร่างดั้งเดิมเสมอไป
  • XML เนื้อหาผสม — ข้อความที่แทรกกับองค์ประกอบลูก — สูญเสียตำแหน่งของข้อความที่สัมพันธ์กับลูก และไม่สามารถเดินทางไปกลับได้
  • ค่า XML เป็นสตริง เว้นแต่จะเปิดการอนุมานประเภท เนื่องจาก XML ไม่ได้ประกาศประเภท ด้วยการอนุมานว่า "0755" และ "NO" อาจมีการอ่านผิดตามปกติ
  • TOML ไม่มีค่าว่าง: คีย์ว่างจะถูกละทิ้งจากเอาต์พุต TOML และค่าว่างภายในอาร์เรย์จะกลายเป็นสตริงว่าง
  • รากของเอกสาร TOML ต้องเป็นตาราง ดังนั้นอาร์เรย์หรือสเกลาร์ JSON จึงไม่สามารถแปลงเป็น TOML ได้เลย
  • JSON หมายเลขคือ IEEE-754 คู่ จำนวนเต็มที่ผ่านมา 2^53 จะถูกแปลงเป็นสตริง แทนที่จะปัดเศษแบบเงียบ ซึ่งจะเปลี่ยนประเภท
  • CSV ไม่สามารถแยกแยะสตริงว่างจากค่าว่างได้ ทั้งสองเขียนเป็นเซลล์ว่าง
  • CSV การทำให้แบนราบจะใช้จุดสำหรับทั้งคีย์ออบเจ็กต์และดัชนีอาร์เรย์ ดังนั้นคีย์ที่มีจุดอยู่แล้วจะสร้างชื่อคอลัมน์ที่ไม่ชัดเจนซึ่งได้รับการเตือนแต่ไม่ได้ Escape
  • YAML จุดยึดและนามแฝงได้รับการแก้ไขแล้ว แทนที่จะคงไว้ เอาต์พุตไม่มีจุดยึด และนามแฝงแบบเรียกซ้ำถูกปฏิเสธเนื่องจากไม่มีรูปแบบเป้าหมายใดที่สามารถแสดงวงจรได้
  • อินพุตถูกจำกัดไว้ตามรูปแบบ — 8 ล้านอักขระสำหรับ JSON, 4 ล้านสำหรับ XML, 2 ล้านอักขระสำหรับ YAML และ TOML — และเอกสารขนาดใหญ่จะถูกปฏิเสธแทนที่จะดำเนินการช้า
  • ไม่มีสิ่งใดที่นี่ที่ตรวจสอบกับสคีมา เอกสารสามารถแปลงได้อย่างหมดจดและยังคงผิดวัตถุประสงค์