ไทย

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

เหตุใดสตริงว่าง NULL และฟิลด์ที่ขาดหายไปจึงไม่เหมือนกันใน CSV

· เหตุใดจึงสำคัญ

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

เซลล์ CSV ว่าง โทเค็น NULL ตามตัวอักษร และแถวสั้นมาถึงเป็นอินพุตที่มองเห็นได้ต่างกัน แต่เป็นเอาต์พุตสตริง
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

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

เซลล์ว่างเดียวกันกลายเป็น NULL ในระบบหนึ่งและเป็นสตริงว่างในอีกระบบหนึ่ง - เหตุใดการเปลี่ยนแปลงจึงรวม การนับ และค่าเฉลี่ย

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

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

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

CSV สามารถมีตัวคั่นสองตัวโดยไม่มีสิ่งใดคั่นระหว่างกัน สตริงว่างที่ยกมาอย่างชัดเจน ข้อความตามตัวอักษร เช่น NULL หรือ NA และแถวที่สิ้นสุดก่อนความกว้างของส่วนหัว ToolAcre แยกวิเคราะห์สองรายการแรกเป็นสตริงว่างและปล่อยให้โทเค็นตามตัวอักษรไม่ถูกแตะต้องเหมือนข้อความธรรมดา

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

ตัวโหลดทั่วไปตีความแต่ละรายการอย่างไร — ค่าเริ่มต้นที่แตกต่างกันในสเปรดชีต ฐานข้อมูล และไลบรารีเฟรมข้อมูล

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

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

ค่าเริ่มต้นของตัวโหลดจะแตกต่างกันไป บทความนี้จัดทำเอกสาร ToolAcre แทนที่จะสรุปลักษณะการทำงานของสเปรดชีตหรือฐานข้อมูล

ข้อความ NULL เป็นอันตรายอย่างยิ่ง เนื่องจากอาจเป็นเนื้อหาของแท้หรือเป็นผู้พิทักษ์ของผู้ส่ง ToolAcre ไม่มีรายการแมวมองที่กำหนดค่าไว้ ดังนั้นจึงคงไว้เป็นสตริงสี่อักขระ "NULL" เช่นเดียวกับ NA, N/A, ศูนย์ และโทเค็นอื่นๆ ที่ผู้ผลิตอาจใช้

อย่าแทนที่สตริงดังกล่าวทั่วโลกโดยไม่มีกฎเฉพาะฟิลด์ คอลัมน์บันทึกย่ออาจมี “NULL” อย่างถูกต้องตามกฎหมาย และคอลัมน์รหัสสามารถใช้ NA ได้ แก้ไขความหมายด้วยเอกสารประกอบของผู้ผลิตหรือสคีมา จากนั้นแปลงเฉพาะคอลัมน์ที่เหมาะสมที่อยู่ระหว่างการตรวจสอบ

JSON ทำให้คุณตัดสินใจ — null, สตริงว่าง และคีย์ที่ขาดหายไปเป็นสามสิ่งที่แตกต่างกันเมื่อไฟล์ถูกแปลง

JSON แยกความแตกต่างระหว่าง null, สตริงว่าง และคุณสมบัติที่ขาดหายไป แต่ ToolAcre เลือกคีย์ปัจจุบันที่มีค่าสตริงสำหรับคอลัมน์ส่วนหัวทุกคอลัมน์ เซลล์ที่ขาดหายไปหรือบุนวมกลายเป็น "" ตัวแปลงไม่ได้สร้าง JSON null และไม่ละเว้นคีย์เพียงเพราะเซลล์ว่างเปล่า

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

ToolAcre ปล่อยสตริงว่างและคีย์ปัจจุบัน ไม่ใช่คีย์ว่างหรือขาดหายไป

ใช้รหัสส่วนหัว หมายเหตุ รหัส และบันทึกสี่รายการ: `1,,A`, `2,"",NULL`, `3,hello` และ `4,world,B,extra` โน้ตสองตัวแรกกลายเป็นสตริงว่าง รหัสในแถวที่สองยังคงเป็น "NULL" แถวที่สามจะได้รับโค้ด "" หลังจากเติม ในขณะที่แถวที่สี่เตือนว่าเซลล์พิเศษไม่มีคีย์

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

สิ่งนี้ไม่ครอบคลุมถึง การใส่ร้ายและกฎเกณฑ์ทางธุรกิจสำหรับค่าที่หายไปควรเป็นค่าเริ่มต้น

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

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

ตัดสินใจว่าช่องว่างหมายถึงอะไรก่อนที่คุณจะโหลด — การแปลง ToolAcre CSV Cleaner's CSV-to-JSON จะทำให้การนำเสนอมองเห็นได้อย่างไร

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

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