ไทย

ข้อมูลและสเปรดชีต · CSV สะอาดยิ่งขึ้น

การแปลงระหว่าง CSV และ JSON: รูปร่าง ประเภท และสิ่งที่สูญหาย

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

csv json ข้อมูลรูปแบบ

ตาราง CSV สี่เหลี่ยมกลายเป็นแถวของวัตถุ JSON แบบแบน ในขณะที่ทุกค่ายังคงเป็นข้อความ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

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

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

การตัดสินใจดังกล่าวจะรักษาข้อความ เช่น 0012 ไว้ครบถ้วน และทำให้สามารถคาดการณ์ Conversion สำหรับการผสานรวม API ได้ นอกจากนี้ยังหมายถึงโค้ดดาวน์สตรีมจะต้องส่งฟิลด์ภายใต้สคีมาของตัวเองก่อนทำการคำนวณ การจัดการไฟล์ที่สร้างขึ้นตามที่พิมพ์ไว้แล้วเป็นเพียงการย้ายสมมติฐานจากตัวแปลงไปเป็นโค้ดแอปพลิเคชันที่มองเห็นได้น้อยลง

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

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

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

รูปร่างทางเลือก — อาร์เรย์ของอาร์เรย์และวัตถุเชิงคอลัมน์ และเมื่อแต่ละรูปร่างเหมาะสมกว่า

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

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

ตัวแปลงนี้ส่งเสียงรูปร่างเดียว: อาร์เรย์ระดับบนสุดของวัตถุแบน

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

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

ประเภทจะถูกเก็บรักษาไว้เป็นข้อความ ToolAcre ไม่มีการอนุมาน

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

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

JSON-to-CSV ยอมรับอาร์เรย์ของวัตถุและเขียนค่าที่ซ้อนกันเป็นข้อความ JSON

พิจารณา name,active,count ตามด้วย Ada,true,007 ผลลัพธ์ JSON คืออาร์เรย์ที่ประกอบด้วยออบเจ็กต์ชื่อ "Ada" ใช้งาน "true" และนับ "007" การแปลงอาร์เรย์อ็อบเจ็กต์แบบแบนกลับจะสร้างเซลล์ข้อความสามเซลล์ที่เหมือนกัน เนื่องจากไม่มีการอนุมานประเภทใดที่จะลบค่าศูนย์หรือแปลงคำที่ดูเป็นบูลีน

ตอนนี้เพิ่มส่วนหัวว่างก่อนค่าอื่น คีย์ JSON จะกลายเป็น column_4 ดังนั้นข้อมูลจึงยังคงสามารถเข้าถึงได้แม้ว่าชื่อแหล่งที่มาจะหายไปก็ตาม อย่างไรก็ตาม เพิ่มเซลล์พิเศษเกินความกว้างของส่วนหัว และตัวโหลดจะเตือนเกี่ยวกับแถวที่ขาดหายไป เซลล์ส่วนเกินนั้นไม่มีคีย์และไม่มีอยู่ใน JSON

สิ่งนี้ไม่ครอบคลุมถึง - JSON ที่ซ้อนกันลึก การตรวจสอบสคีมา และการสตรีมเอกสาร JSON ที่มีขนาดใหญ่มาก

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

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

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

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

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