เครื่องมือสำหรับนักพัฒนา · ตัวแปลงไวยากรณ์
CSV ถึง JSON และ JSON ถึง CSV: ส่วนหัว ค่าสตริง และการทำให้แบนราบ
· มันทำงานอย่างไร
json csv ข้อมูลรูปแบบ
CSV มีลักษณะแบน ไม่มีประเภท และไม่ชัดเจนเกี่ยวกับตัวคั่นของตัวเอง ในขณะที่ JSON ซ้อนกันและพิมพ์ โพสต์นี้แสดงวิธีที่ตัวแปลงแมปแถวกับออบเจ็กต์และด้านหลัง และตำแหน่งที่ข้อมูลสูญหายในแต่ละทิศทาง
ทุกตัวเลขกลับมาด้วยเครื่องหมายคำพูด — การส่งออก CSV แปลงเป็น JSON โดยที่ 42 กลายเป็น "42" และโค้ด ZIP ยังคงเป็นศูนย์นำหน้าอยู่ครั้งหนึ่ง
สมุดงานจะขอตัวอย่าง CSV-to-JSON แต่ ToolAcre ไม่เคยอ่าน CSV เครื่องยนต์โฆษณาคู่โดยตรงเก้าคู่พอดี และไม่มีคู่ที่ขึ้นต้นด้วย CSV การอ่านไฟล์จะต้องมีตัวเลือกเกี่ยวกับตัวคั่น เครื่องหมายคำพูด การแสดงส่วนหัว และประเภทเซลล์ แผงนี้ปฏิเสธที่จะคาดเดาอย่างเงียบ ๆ สี่ครั้ง บทความที่ได้รับการแก้ไขจึงบันทึกทิศทาง JSON-to-CSV ที่จัดส่ง
การตัดสินใจแบบทางเดียวนั้นมองเห็นได้ทั้งในส่วนต่อประสานและข้อผิดพลาด CSV ปรากฏเป็นเป้าหมาย ไม่ใช่แหล่งที่มา และการพยายามย้อนกลับจะส่งคืน `UNSUPPORTED_CONVERSION` พร้อมคำแนะนำให้ใช้เครื่องมือที่ถามเกี่ยวกับภาษาถิ่นและประเภท ชื่อที่แนะนำทั้งสองทิศทางอาจทำให้ผลิตภัณฑ์เข้าใจผิด แม้ว่าหัวข้อทั่วไปจะพบเห็นได้ทั่วไปในที่อื่นก็ตาม
CSV ไม่ได้อ่านที่นี่: เริ่มต้นด้วยเส้นทาง JSON-to-CSV ที่เครื่องมือจัดส่งจริง
อาร์เรย์รูท JSON จัดเตรียมแถวต่างๆ วัตถุธรรมดาจะกลายเป็นหนึ่งแถว วัตถุที่มีคีย์เพียงคีย์เดียวที่เก็บอาร์เรย์จะแกะอาร์เรย์นั้นและเตือนว่าใช้คุณสมบัติที่มีชื่อ อ็อบเจ็กต์ที่มีคีย์พี่น้องเพิ่มเติมจะไม่แกะออก เนื่องจากการทำเช่นนั้นจะละทิ้งหรือทำซ้ำพี่น้องเหล่านั้น
แต่ละเรกคอร์ดที่เลือกจะถูกทำให้เรียบก่อนที่จะรวบรวมคอลัมน์ บันทึกอาจเป็นสเกลาร์ภายในอาร์เรย์ก็ได้ สิ่งเหล่านั้นใช้คอลัมน์ `value` สเกลาร์เปล่าที่รูทเอกสารถูกปฏิเสธ เนื่องจากสตริงหรือตัวเลขหนึ่งรายการไม่ได้กำหนดตารางที่มีเรคคอร์ดและฟิลด์
การเลือกบันทึกจาก JSON: อาร์เรย์ อ็อบเจ็กต์เดี่ยว และตัวตัดอาเรย์แบบคีย์เดียว
ประเภท JSON จะอยู่ในรูปแบบข้อความเซลล์เท่านั้น บูลีนกลายเป็น `true` และ `false` ตัวเลขใช้การแสดงผลทศนิยม และ null จะกลายเป็นเซลล์ว่าง CSV ไม่สามารถแยกแยะค่าว่างจากสตริงว่างได้ ดังนั้นผู้เขียนจึงนับค่าว่างและเตือนเกี่ยวกับความกำกวม แทนที่จะเรียกผลลัพธ์ที่เทียบเท่ากัน
จำนวนเต็มกว้างจะต้องถูกแยกวิเคราะห์ JSON ก่อนขั้นตอนนี้ ดังนั้นตัวอักษรตัวเลขที่ไม่ปลอดภัยอาจสูญเสียความแม่นยำ การใส่ตัวระบุในเครื่องหมายคำพูดจะรักษาข้อความไว้ สตริงที่มีลักษณะคล้ายสูตรจะได้รับเครื่องหมายอะพอสทรอฟี่เพิ่มเติมตามค่าเริ่มต้น เมื่อเริ่มต้นด้วย `=`, `+`, `-`, `@`, แท็บ หรือ แคร่กลับ; ตัวเลขจริง `-5` ยังคงเป็นตัวเลขและไม่ได้นำหน้า
เหตุใดเอาต์พุต CSV จึงไม่สามารถรักษาประเภท JSON ได้
คอลัมน์คือการรวมกันของคีย์ที่แบนตามลำดับที่เห็นครั้งแรก หากแถวหนึ่งมี `a` และอีกแถวมี `b` เอาต์พุตจะมีทั้งคอลัมน์และแผ่นแต่ละช่องที่ขาดหายไปพร้อมกับเซลล์ว่าง คำเตือนจะรายงานแถวที่ขาดๆ หายๆ แทนที่จะเปลี่ยนค่าใต้ส่วนหัวที่ไม่ถูกต้อง
การเรียงลำดับคีย์วัตถุไม่ได้ใช้กับ CSV; กฎของผู้เขียนคือการปรากฏตัวครั้งแรกในบันทึกต่างๆ นั่นทำให้ตัวอย่างมีเสถียรภาพสำหรับอินพุต JSON แบบคงที่ แต่ไม่ใช่สัญญาสคีมา จัดเรียงซอร์สคีย์โดยเจตนาหรือภายหลังการประมวลผลส่วนหัวเมื่อการนำเข้าดาวน์สตรีมต้องมีคำสั่งที่กำหนดไว้
การทำให้ข้อมูลที่ซ้อนกันเรียบขึ้น — เส้นทางแบบจุด เช่น address.city อาร์เรย์เป็นคอลัมน์ที่จัดทำดัชนีหรือสตริงที่รวม และจุดที่ CSV ไม่สามารถคงรูปร่างไว้ได้
คีย์ออบเจ็กต์ที่ซ้อนกันจะรวมเข้ากับจุด: `address.city` อาร์เรย์ใช้ตัวคั่นและดัชนีตัวเลขเดียวกัน: `tags.0`, `tags.1` วัตถุและอาร์เรย์ว่างจะเก็บเซลล์ว่างไว้หนึ่งเซลล์ในเส้นทางของตัวเองแทนที่จะหายไป สิ่งนี้จะสร้างสี่เหลี่ยมผืนผ้าในขณะที่ยอมรับว่ามีการฉายต้นไม้เป็นชื่อ
ซอร์สคีย์ที่มีจุดอยู่แล้วไม่ชัดเจนกับเส้นทางที่ซ้อนกัน ToolAcre ตรวจจับและเตือนแต่ไม่ได้สร้างไวยากรณ์ Escape ที่สเปรดชีตจะไม่เข้าใจ อาร์เรย์แบบลึกหรือแบบยาวอาจเกินขีดจำกัดคอลัมน์ 2,000 ซึ่งการแปลงจะปฏิเสธ แทนที่จะปล่อยตารางที่ซอฟต์แวร์สเปรดชีตทั่วไปไม่สามารถใช้งานได้
ตัวอย่างการทำงาน: รายชื่อลูกค้าทั้งสองวิธี — CSV ถึง JSON แก้ไขฟิลด์ที่ซ้อนกัน และ JSON กลับไปที่ CSV โดยที่การซ้อนกันเป็นแบบราบ
ใช้ `[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]` ส่วนหัวประกอบด้วย id, address.city, tags.0, tags.1 และหมายเหตุ แถวที่สองจะได้รับช่องว่างหากไม่มีดัชนีแท็ก และบันทึกย่อว่างจะแยกไม่ออกจากข้อความว่าง
โน้ตแรกจะขึ้นต้นด้วยเครื่องหมายอะพอสทรอฟี่ ดังนั้นสเปรดชีตจึงถือเป็นข้อความ บันทึกลงท้ายด้วย CRLF ฟิลด์ที่มีตัวคั่น เครื่องหมายคำพูด หรือการลงท้ายบรรทัดจะมีเครื่องหมายคำพูดคู่ และเครื่องหมายคำพูดแบบฝังจะเพิ่มเป็นสองเท่า การเลือกอัฒภาคหรือแท็บจะเปลี่ยนตัวคั่น สามารถเพิ่ม UTF-8 BOM ซึ่งเป็นตัวเลือกให้กับผู้บริโภคที่ต้องการได้
ตัวอย่างการทำงาน: อาร์เรย์ของลูกค้าที่ซ้อนกันถูกทำให้เรียบหนึ่งครั้งใน CSV
CSV ที่มีรูปแบบไม่ถูกต้องหรือเข้ารหัสไม่ชัดเจนอยู่นอกเส้นทางนี้เนื่องจากไม่มี CSV เข้ามา CSV Cleaner คือที่สำหรับเลือกหรือตรวจจับภาษาถิ่นและซ่อมแซมคำพูด ที่นี่แหล่งที่มาเข้มงวด JSON และเอาต์พุตเป็นไปตามแบบแผนนักเขียนที่บันทึกไว้
ตัวแปลงยังจำกัดเอาต์พุตไว้ที่ 100,000 แถวและ 2,000 คอลัมน์ อาร์เรย์ว่างจะถูกปฏิเสธเนื่องจากไฟล์ที่ไม่มีส่วนหัวหรือแถวไม่มีรูปร่างของตาราง ขีดจำกัดเหล่านั้นเป็นเส้นทางโค้ดที่บังคับใช้ ไม่ใช่สัญญาด้านประสิทธิภาพ และบทความนี้ไม่ได้สร้างตัวเลขปริมาณงาน
ประเด็นสำคัญ: CSV เป็นตาราง JSON เป็นต้นไม้ — และวิธีที่แผงตัวแปลงไวยากรณ์ย้ายไปมาระหว่างตารางโดยไม่ต้องอัปโหลดแถว
JSON เป็นต้นไม้ที่พิมพ์ CSV เป็นตารางข้อความ ToolAcre เลือกแถว ปรับเส้นทางให้เรียบ คอลัมน์สหภาพ ฟิลด์เครื่องหมายคำพูด และปรับข้อความที่เป็นอันตรายให้เป็นกลาง แต่ไม่สามารถคงค่าว่างเทียบกับค่าว่าง หรือสร้างการซ้อนใหม่ในภายหลังได้ การสูญเสียเหล่านี้เป็นโครงสร้างมากกว่าการจัดรูปแบบสัญญาณรบกวน
ใช้ทิศทางนี้เมื่อเอาต์พุตที่มีรูปทรงสเปรดชีตเป็นสิ่งที่ตั้งใจไว้ หากคุณต้องการ CSV-to-JSON ให้เลือกผู้อ่านที่ถามเกี่ยวกับตัวคั่น ส่วนหัว และประเภท การปฏิเสธสิ่งที่ตรงกันข้ามนั้นปลอดภัยกว่าการส่งคืน JSON ที่น่าเชื่อถือซึ่งสร้างขึ้นจากการเดาที่ไม่ได้รับการตรวจสอบ