Python Data Persistence - โมดูล JSON

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

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

เช่นเดียวกับในโมดูลดองโมดูล json ก็มีให้เช่นกัน dumps() และ loads() ฟังก์ชันสำหรับการทำให้เป็นอนุกรมของวัตถุ Python เป็นสตริงที่เข้ารหัส JSON และ dump() และ load() ฟังก์ชันเขียนและอ่านอ็อบเจกต์ Python แบบอนุกรมไปยัง / จากไฟล์

  • dumps() - ฟังก์ชันนี้จะแปลงวัตถุเป็นรูปแบบ JSON

  • loads() - ฟังก์ชันนี้จะแปลงสตริง JSON กลับเป็น Python object

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานพื้นฐานของฟังก์ชันเหล่านี้ -

import json
   data=['Rakesh',{'marks':(50,60,70)}]
   s=json.dumps(data)
json.loads(s)

ฟังก์ชัน dumps () สามารถใช้อาร์กิวเมนต์ sort_keys ที่เป็นทางเลือก โดยค่าเริ่มต้นจะเป็นเท็จ หากตั้งค่าเป็น True คีย์พจนานุกรมจะปรากฏตามลำดับที่จัดเรียงในสตริง JSON

ฟังก์ชัน dumps () มีพารามิเตอร์ทางเลือกอื่นที่เรียกว่าการเยื้องซึ่งใช้ตัวเลขเป็นค่า กำหนดความยาวของแต่ละส่วนของการจัดรูปแบบของสตริง json ซึ่งคล้ายกับเอาต์พุตการพิมพ์

โมดูล json ยังมี API เชิงวัตถุที่สอดคล้องกับฟังก์ชันข้างต้น มีสองคลาสที่กำหนดไว้ในโมดูล - JSONEncoder และ JSONDecoder

คลาส JSONEncoder

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

Python JSON
Dict วัตถุ
รายการทูเพิล อาร์เรย์
Str สตริง
int, float, int- และลอยได้มา Enums จำนวน
จริง จริง
เท็จ เท็จ
ไม่มี โมฆะ

คลาส JSONEncoder สร้างอินสแตนซ์โดยตัวสร้าง JSONEncoder () วิธีการที่สำคัญต่อไปนี้ถูกกำหนดไว้ในคลาสตัวเข้ารหัส -

ซีเนียร์ วิธีการและคำอธิบาย
1

encode()

ทำให้ออบเจ็กต์ Python เป็นอนุกรมในรูปแบบ JSON

2

iterencode()

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

3

indent

กำหนดระดับการเยื้องของสตริงที่เข้ารหัส

4

sort_keys

เป็นจริงหรือเท็จเพื่อให้คีย์ปรากฏตามลำดับที่เรียงหรือไม่

5

Check_circular

ถ้าเป็นจริงให้ตรวจสอบการอ้างอิงแบบวงกลมในออบเจ็กต์ประเภทคอนเทนเนอร์

ตัวอย่างต่อไปนี้เข้ารหัสวัตถุรายการ Python

e=json.JSONEncoder()
e.encode(data)

คลาส JSONDecoder

ออบเจ็กต์ของคลาสนี้ช่วยในการถอดรหัสในสตริง json กลับไปที่โครงสร้างข้อมูล Python เมธอดหลักในคลาสนี้คือถอดรหัส () โค้ดตัวอย่างต่อไปนี้ดึงข้อมูลรายการ Python จากสตริงที่เข้ารหัสในขั้นตอนก่อนหน้า

d=json.JSONDecoder()
d.decode(s)

โมดูล json กำหนด load() และ dump() ฟังก์ชั่นในการเขียนข้อมูล JSON ไปยังไฟล์เช่นอ็อบเจ็กต์ซึ่งอาจเป็นไฟล์ดิสก์หรือสตรีมไบต์และอ่านข้อมูลจากไฟล์เหล่านั้น

ถ่ายโอนข้อมูล ()

ฟังก์ชันนี้เขียนข้อมูลวัตถุ JSONed Python ไปยังไฟล์ ต้องเปิดไฟล์ด้วยโหมด 'w'

import json
data=['Rakesh', {'marks': (50, 60, 70)}]
   fp=open('json.txt','w')
   json.dump(data,fp)
   fp.close()

รหัสนี้จะสร้าง 'json.txt' ในไดเรกทอรีปัจจุบัน แสดงเนื้อหาดังนี้ -

["Rakesh", {"marks": [50, 60, 70]}]

โหลด ()

ฟังก์ชันนี้จะโหลดข้อมูล JSON จากไฟล์และส่งคืนวัตถุ Python จากมัน ไฟล์ต้องเปิดโดยได้รับอนุญาตให้อ่าน (ควรมีโหมด 'r')

Example

fp=open('json.txt','r')
   ret=json.load(fp)
   print (ret)
   fp.close()

Output

['Rakesh', {'marks': [50, 60, 70]}]

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

C:\python37>python -m json.tool json.txt
[
   "Rakesh",   
   {
      "marks": [
         50,
         60,
         70
      ]
   }
]