วิธีแยก JSON ใน Python
เผยแพร่แล้ว: 2022-02-09JSON เป็นรูปแบบที่นิยมสำหรับการแลกเปลี่ยนข้อมูล 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 สิ่งเหล่านี้จะถูกแปลงเป็น BooleansTrue
และ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 ของคุณอยู่ในโฟลเดอร์อื่น อย่าลืมระบุพาธไปยังไฟล์

ในส่วนถัดไป คุณจะได้เรียนรู้วิธีเขียนไปยังไฟล์ 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 ได้

เมื่อเขียนไปยังไฟล์ เป้าหมายหลักคือการจัดเก็บข้อมูล และหากคุณต้องการคงการจัดรูปแบบไว้ คุณยังสามารถใช้พารามิเตอร์ indent
และ sort_keys
ได้อีกด้วย
บทสรุป
ถึงเวลาสำหรับการสรุปอย่างรวดเร็ว
ในบทช่วยสอนนี้ คุณได้เรียนรู้:
- พื้นฐานของการใช้ JSON
- วิธีใช้
loads()
และวิธีload()
เพื่ออ่านสตริง JSON และไฟล์ JSON ตามลำดับ - วิธีใช้เมธอด
dumps()
และdump()
เพื่อดัมพ์พจนานุกรม Python ลงในสตริง JSON และไฟล์ JSON ตามลำดับ
ฉันหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์ มีความสุขในการเรียนรู้!
คุณอาจดูที่เครื่องมือ JSON เพื่อแยกวิเคราะห์ จัดรูปแบบ และตรวจสอบความถูกต้อง