วิธีอ่านและเขียนไฟล์ Json ใน Python

How Read Write Json Files Python



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

เกี่ยวกับ JSON

JSON (JavaScript Object Notation) เป็นรูปแบบไฟล์และมาตรฐานการจัดเก็บข้อมูลที่ใช้คู่คีย์-ค่าในการจัดเก็บและแลกเปลี่ยนข้อมูล เป็นรูปแบบการแลกเปลี่ยนข้อมูลที่ใช้กันอย่างแพร่หลาย มักพบใน RESTful API ฐานข้อมูลขนาดเล็ก ไฟล์ปรับแต่ง และซอฟต์แวร์ออฟไลน์หรือออนไลน์อื่นๆ ที่ต้องการจัดเก็บ ดึงข้อมูล และแลกเปลี่ยนข้อมูล ภาษาโปรแกรมส่วนใหญ่มีไลบรารี่เพื่อแยกวิเคราะห์และเขียนข้อมูล JSON โดยค่าเริ่มต้น และ JSON เป็นรูปแบบข้อมูลไม่เชื่อเรื่องพระเจ้าของภาษาโปรแกรม ค่าที่เก็บไว้ในไฟล์ JSON หรือเพย์โหลดมักประกอบด้วยสตริง ตัวเลข และประเภทข้อมูลที่ทำให้ซีเรียลไลซ์ได้ เช่น รายการ (อาร์เรย์)







พจนานุกรม JSON และ Python

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



การอ่านและการดัมพ์ข้อมูล JSON ใน Python

สามารถดึงข้อมูล JSON เป็นรูปแบบการตอบสนองของเซิร์ฟเวอร์ อ่านจากไฟล์ แยกส่วนจากพารามิเตอร์การสืบค้น URL และอื่นๆ บทความนี้จะเน้นไปที่การอ่านข้อมูล json จากไฟล์ที่จัดเก็บไว้ในเครื่องเป็นหลัก สมมติว่าไฟล์ test.json มีข้อมูลต่อไปนี้:



{'ชื่อรหัส': 'Eoan Ermine', 'เวอร์ชัน': 'Ubuntu 19.10'}

หากต้องการอ่านไฟล์ test.json ใน python คุณสามารถใช้โค้ดด้านล่าง:





นำเข้าjson

กับ เปิด ('test.json') เช่นNS:
ข้อมูล=เจสันโหลด(NS)

ทิ้ง=เจสันทิ้ง(ข้อมูล)

พิมพ์ (ข้อมูล)
พิมพ์ (พิมพ์(ข้อมูล))
พิมพ์ (ทิ้ง)
พิมพ์ (พิมพ์(ทิ้ง))

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

{'รหัสชื่อ':'อีออน เออร์มีน', 'รุ่น':'อูบุนตู 19.10'}
<ระดับ 'ดิก'>
{'รหัสชื่อ':'อีออน เออร์มีน', 'รุ่น':'อูบุนตู 19.10'}
<ระดับ 'str'>

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



การเรียงลำดับและการพิมพ์ข้อมูล JSON ให้สวยงาม

เมธอด json.dump รองรับพารามิเตอร์ทางเลือกบางตัวสำหรับการเรียงลำดับคีย์และการพิมพ์เอาต์พุตเพื่อให้อ่านง่ายขึ้น

นำเข้าjson

กับ เปิด ('test.json') เช่นNS:
ข้อมูล=เจสันโหลด(NS)

ทิ้ง=เจสันทิ้ง(ข้อมูล,sort_keys=จริง,เยื้อง=4)
พิมพ์ (ทิ้ง)

รหัสด้านบนจะแสดงผลลัพธ์ต่อไปนี้:

{
'ชื่อรหัส': 'Eoan Ermine',
'เวอร์ชัน': 'Ubuntu 19.10'
}

การแปลงประเภทข้อมูล

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

JSON Python
สตริง NS
ตัวเลข int หรือ float
ถูกผิด ถูกผิด
โมฆะ ไม่มี
อาร์เรย์ รายการ
วัตถุ dict

โมดูลบรรทัดคำสั่ง Json.tool

Python มียูทิลิตีบรรทัดคำสั่งที่ดี json.tool ที่สามารถใช้เพื่อตรวจสอบและพิมพ์สตริงและไฟล์ JSON ที่สวยงาม

$ echo'{'codename': 'Eoan Ermine', 'เวอร์ชัน': 'Ubuntu 19.10'}'| python3 -m jsonเครื่องมือ

การรันคำสั่งด้านบนจะแสดงผลลัพธ์ต่อไปนี้:

{
'ชื่อรหัส': 'Eoan Ermine',
'เวอร์ชัน': 'Ubuntu 19.10'
}

คุณยังสามารถใช้ json.tool กับไฟล์ JSON ได้อีกด้วย แทนที่ in_file และ out_file ในคำสั่งด้านล่างด้วยค่าที่คุณต้องการ:

$ python3 -m jsonเครื่องมือin_file out_file

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