วิธีแยก JSON ใน Python

เผยแพร่แล้ว: 2022-02-09

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

ในตอนท้ายของบทช่วยสอนนี้ คุณจะได้เรียนรู้:

  • พื้นฐานของ JSON
  • วิธีแยกวิเคราะห์และสร้างสตริง JSON ใน Python และ
  • วิธีอ่านและเขียนไฟล์ JSON ใน Python

เริ่มกันเลย!

JSON คืออะไร?

JSON ย่อมาจาก J ava S cript O bject N otation และเป็นรูปแบบ ข้อความ สำหรับการแลกเปลี่ยนข้อมูล แม้ว่าในตอนแรก JSON จะได้รับแรงบันดาลใจ จากออบเจกต์ JavaScript แต่ภาษาการเขียนโปรแกรมเกือบทั้งหมดรองรับการ ทำงานกับ JSON

หากคุณเคยทำงานกับ API หรืออ่านไฟล์การกำหนดค่า คุณอาจพบ JSON แล้ว

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

รูปแบบของ JSON นั้นคล้ายกับพจนานุกรม Python มาก พจนานุกรมเป็นโครงสร้างข้อมูลในตัวที่มีประสิทธิภาพใน Python ที่จัดเก็บข้อมูลใน คู่คีย์-ค่า

ก่อนที่เราจะดำเนินการต่อ ต่อไปนี้คือประเด็นสำคัญบางประการที่ควรทราบ:

  • ใน Python อ็อบเจ็กต์ JSON ถูกจัดเก็บเป็นพจนานุกรม
  • อาร์เรย์ใน JSON ถูกจัดเก็บเป็นรายการ Python
  • ใน JSON ค่าบูลีนจะแสดงเป็น true และ false ใน Python สิ่งเหล่านี้จะถูกแปลงเป็น Booleans True และ False

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับประเภทข้อมูลที่แปลจาก JSON เป็น Python โปรดอ่านเอกสารที่นี่

เนื่องจากโมดูล json เป็นส่วนหนึ่งของไลบรารีมาตรฐาน Python คุณไม่จำเป็นต้องติดตั้ง คุณสามารถนำเข้าไปยังไดเร็กทอรีปัจจุบันของคุณได้ดังนี้:

 import json

วิธีโหลดสตริง JSON ใน Python

ไวยากรณ์ทั่วไปในการโหลดสตริง JSON ใน Python คือ:

 <dict_obj> = json.loads(<json_str>)

ที่นี่,

  • <dict_obj> คือพจนานุกรม Python ที่คุณต้องการโหลดสตริง JSON
  • <json_str> เป็นสตริง JSON ที่ถูกต้อง

สิ่งนี้จะโหลด <json_str> ลงในพจนานุกรม Python <dict_obj>

ลองโค้ดตัวอย่าง ที่นี่ json_str เป็นสตริง JSON

 json_str = ''' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''

และโค้ดด้านล่างแสดงให้เห็นว่าคุณสามารถโหลดสตริง JSON json_str ลงในพจนานุกรม Python โดยใช้เมธอด loads() ได้อย่างไร คุณสามารถใช้ฟังก์ชัน type() ในตัวเพื่อตรวจสอบว่า py_dict เป็นพจนานุกรม Python

 py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

ตามที่แสดงในโค้ดด้านบน ฟิลด์ทั้งหมดในสตริง JSON เป็นคู่คีย์-ค่าใน py_dict

วิธีสร้างสตริง JSON ใน Python

สมมติว่าคุณมีพจนานุกรม Python คุณจะสร้างสตริง JSON จากมันได้อย่างไร

คุณสามารถทำได้โดยใช้เมธอด dumps() ด้วยไวยากรณ์นี้:

 <json_str> = json.dumps(<dict_obj>)

ที่นี่,

  • <dict_obj> คือพจนานุกรม Python ที่คุณต้องการสร้างสตริง JSON
  • <json_str> คือสตริง JSON ที่เป็นผลลัพธ์

ดังนั้น dumps() วิธีการถ่ายโอน <dict_obj> ลงในสตริง JSON <json_str>

ไปยังพจนานุกรม Python ที่มีอยู่ของเรา py_dict มาเพิ่มคีย์ใหม่ "movies" คุณสามารถทำได้ตามที่แสดงในข้อมูลโค้ดต่อไปนี้:

 py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]

ตอนนี้ เรามาถ่ายโอนพจนานุกรมที่แก้ไขแล้วไปยังสตริง JSON ใหม่ json_str2 โดยใช้เมธอด dumps()

 json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

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

และคุณสามารถทำได้โดยตั้งค่าการ indent เป็นจำนวนเต็มเช่น 2 ดังที่แสดงด้านล่าง:

 json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }

สังเกตว่าผลลัพธ์ได้รับการจัดรูปแบบด้วยการเยื้อง และง่ายต่อการปฏิบัติตาม

หมายเหตุ : หากคุณต้องการให้คีย์เรียงลำดับตามตัวอักษร คุณสามารถตั้งค่าพารามิเตอร์ sort_keys เป็น True

ดังที่คุณเห็นในข้อมูลโค้ดด้านล่าง ขณะนี้คีย์ต่างๆ ได้รับการจัดเรียงตามลำดับตัวอักษรแล้ว

 json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]

และตอนนี้ปุ่มต่างๆ จะปรากฏตามลำดับตัวอักษร: "author" , "title" และ "year"

จนถึงตอนนี้ คุณได้เรียนรู้วิธีทำงานกับสตริง JSON ใน Python แล้ว ในส่วนถัดไป คุณจะได้เรียนรู้วิธีทำงานกับไฟล์ JSON

วิธีอ่านไฟล์ JSON ใน Python

หากต้องการอ่าน ไฟล์ JSON ใน Python ให้ใช้ไวยากรณ์ต่อไปนี้:

 json.load(<json-file>) # where <json-file> is any valid JSON file.

สังเกตว่าเราใช้เมธอด load() ไม่ใช่เมธอด loads() loads() โหลด สตริง JSON ในขณะที่ load() โหลด ไฟล์ JSON

คุณควรพิจารณาใช้ตัวจัดการบริบทเมื่อทำงานกับไฟล์ใน Python คุณยังสามารถลองอ่านไฟล์ได้ดังนี้ โดยไม่ต้องใช้ตัวจัดการบริบท:

 my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()

ถ้าคุณไม่ปิดไฟล์ อาจทำให้สูญเสียทรัพยากรได้

อย่างไรก็ตาม เมื่อทำงานกับตัว จัดการบริบท ไฟล์จะถูกปิดโดยอัตโนมัติเมื่อการดำเนินการของไฟล์เสร็จสิ้น

และคุณสามารถใช้ตัวจัดการบริบทเพื่ออ่านไฟล์ดังที่แสดงด้านล่าง:

 with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

ขณะที่คุณกำลังอ่านจากไฟล์ ให้ระบุโหมดที่ อ่าน — ระบุด้วย 'r' ในโค้ดด้านบน

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

read-json-file-in-python
อ่านไฟล์ JSON ใน Python

ในส่วนถัดไป คุณจะได้เรียนรู้วิธีเขียนไปยังไฟล์ JSON

วิธีเขียนไปยังไฟล์ JSON ใน Python

ในการเขียนไปยังไฟล์ JSON ที่มีอยู่หรือสร้างไฟล์ JSON ใหม่ ให้ใช้เมธอด dump() ดังที่แสดง:

 json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file

ดังนั้นไวยากรณ์ข้างต้นจึงทิ้งพจนานุกรม <dict_obj> ลงในไฟล์ JSON <json_file>

ในส่วนก่อนหน้านี้ เรามีพจนานุกรม py_dict ทีนี้ลองทิ้งมันลงในไฟล์ JSON ใหม่ และตั้งชื่อมันว่า new_file.json

และเซลล์รหัสต่อไปนี้แสดงวิธีที่คุณสามารถใช้ฟังก์ชัน dump() :

 with open('new_file.json','w') as file: json.dump(py_dict,file)

หมายเหตุ : การเปิดไฟล์ในโหมด เขียน ( w ) จะเขียนทับเนื้อหาหากมีไฟล์อยู่ หากไม่มีไฟล์ ไฟล์จะถูกสร้างขึ้น

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

create-json-file-python
สร้างไฟล์ JSON ใน Python

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

บทสรุป

ถึงเวลาสำหรับการสรุปอย่างรวดเร็ว

ในบทช่วยสอนนี้ คุณได้เรียนรู้:

  • พื้นฐานของการใช้ JSON
  • วิธีใช้ loads() และวิธี load() เพื่ออ่านสตริง JSON และไฟล์ JSON ตามลำดับ
  • วิธีใช้เมธอด dumps() และ dump() เพื่อดัมพ์พจนานุกรม Python ลงในสตริง JSON และไฟล์ JSON ตามลำดับ

ฉันหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์ มีความสุขในการเรียนรู้!

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