โมดูล JSON Module ในภาษา Python
JSON ย่อมาจาก JavaScript Object Notation ซึ่งเป็นรูปแบบข้อมูลที่นิยมใช้สำหรับการส่งข้อมูลระหว่างเครื่องคอมพิวเตอร์หรือระหว่างเว็บเซอร์วิส โดย JSON จะมีรูปแบบเป็นข้อความ ซึ่งมีโครงสร้างเหมือนกับ Dictionary ในภาษา Python ดังนั้นการใช้ JSON กับ Python จึงมีความสะดวกและใช้งานได้ง่าย
ในภาษา Python เราสามารถใช้งาน JSON ได้โดยใช้โมดูล
json
ซึ่งมาตรฐานมาตรฐานกับ Python และสามารถนำ JSON เข้ามาเป็นข้อมูลใน Python ได้และสามารถแปลงกลับไปเป็น JSON อีกครั้งได้อย่างสะดวก
ตัวอย่าง
import json
# ตัวอย่าง Python object
person = {
"name": "John",
"age": 30,
"city": "New York"
}
# แปลง Python object เป็น JSON string และแสดงผล
person_json = json.dumps(person, indent=4)
print(person_json)
# แปลง JSON string เป็น Python object และแสดงผล
person_dict = json.loads(person_json)
print(person_dict)
# แปลง Python object เป็น JSON format และเขียนลงในไฟล์
with open("person.json", "w") as f:
json.dump(person, f)
# อ่านข้อมูล JSON จากไฟล์และแปลงเป็น Python object
with open("person.json", "r") as f:
person_from_file = json.load(f)
print(person_from_file)
ผลลัพธ์ที่ได้ คือ
{
"name": "John",
"age": 30,
"city": "New York"
}
{'name': 'John', 'age': 30, 'city': 'New York'}
{'name': 'John', 'age': 30, 'city': 'New York'}
โมดูล json
ในภาษา Python มีฟังก์ชันหลายตัวที่ช่วยในการจัดการกับข้อมูล JSON ได้แก่
-
json.dumps()
: แปลง Python object เป็น JSON format (serialize) โดยสามารถกำหนดตัวแปรindent
ในการกำหนดจำนวน space ที่ใช้เว้นบรรทัดใน JSON output ได้ -
json.loads()
: แปลง JSON string เป็น Python object (deserialize) -
json.dump()
: แปลง Python object เป็น JSON format แล้วเขียนลงในไฟล์ โดยระบุตำแหน่งไฟล์ที่ต้องการเขียน -
json.load()
: อ่านข้อมูล JSON จากไฟล์แล้วแปลงเป็น Python object json.JSONEncoder
ใช้สำหรับการเขียนข้อมูลเป็น JSON ด้วยการ encode object ให้กลายเป็น JSON format ที่ใช้ส่งข้อมูลระหว่างเว็บเซอร์วิส หรือบันทึกข้อมูลลงในไฟล์json.JSONEncoder
เป็นคลาสในโมดูลjson
ของภาษา Python ที่ใช้สำหรับแปลงข้อมูล Python ให้อยู่ในรูปแบบ JSON โดยสามารถกำหนดค่าการแปลงข้อมูลได้ตามต้องการ
json.dumps()
เป็นฟังก์ชันของโมดูล json
ในภาษา Python ที่ใช้สำหรับแปลง Python object ให้อยู่ในรูปของ JSON string โดยฟังก์ชันนี้จะรับ object เข้ามานรูปแบบของ Python data structure แล้วแปลงให้อยู่ในรูปของ JSON string โดยการแปลงจะเป็นตามรูปแบบของ JSON syntax
การใช้งาน json.dumps()
มีรูปแบบดังนี้
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
โดยที่:
obj
: จะระบุข้อมูลที่ต้องการแปลงเป็น JSON stringskipkeys
(default=False): ถ้าเป็นTrue
จะไม่รองรับ keys ที่ไม่ใช่ string ใน dictionary โดยจะถูกข้ามไปเลยensure_ascii
(default=True): ถ้าเป็นTrue
จะแปลงข้อมูลเป็น Unicode escapes สำหรับ ASCII ที่ไม่พอดี ถ้าเป็นFalse
จะเรียกใช้ Unicode โดยตรงcheck_circular
(default=True): ถ้าเป็นTrue
จะตรวจสอบว่ามีการอ้างอิงเชิงวงกลมใน obj หรือไม่ และถ้ามีจะเกิดValueError
ขึ้นallow_nan
(default=True): ถ้าเป็นTrue
จะรองรับการแปลงNaN
,Infinity
,-Infinity
เป็นnull
ถ้าเป็นFalse
จะเกิดValueError
ขึ้นcls
(default=None): ถ้าไม่ระบุ จะใช้json.JSONEncoder
เป็นค่าเริ่มต้น หรือสามารถระบุเป็น subclass ของjson.JSONEncoder
ได้ สำหรับการแปลง object ที่ไม่สามารถแปลงเป็น JSON ได้indent
(default=None): กำหนดระยะห่างของ indentation (การเว้นวรรค) ใน JSON string ที่สร้างขึ้น ถ้าไม่ได้ระบุจะไม่มีการเว้นวรรค หรือระบุเป็นจำนวนตัวอักษรในแต่ละบรรทัดseparators
(default=None): กำหนดเครื่องหมายต่าง ๆ ใน JSON string ที่สร้างขึ้น โดยระบุเป็น tuple ของ 2 ตัวอักษร เช่น(',', ':')
หรือ(',', ': ')
เป็นต้น
โดยฟังก์ชัน json.dumps()
มีพารามิเตอร์หลัก 2 ตัว ได้แก่
obj
(จำเป็น): รับ object เข้ามาในรูปแบบของ Python data structure เช่น dictionary, list, tuple, set เป็นต้นindent
(ไม่จำเป็น): ระบุจำนวน space หรือ tab สำหรับการ indent ของ JSON string ซึ่งทำให้อ่านง่ายขึ้น หากไม่ระบุจะไม่มีการ indent
โดยเมื่อใช้งานฟังก์ชัน
json.dumps()
จะได้ออกมาเป็น JSON string ที่สามารถใช้ส่งออกไปยังอื่น ๆ ได้หรือเก็บลงในไฟล์ที่มีนามสกุล .json เพื่อใช้ในการอ่านหรือนำเข้าข้อมูลใน Python อีกครั้งในภายหลัง หรือสามารถนำไปใช้กับเว็บแอปพลิเคชันที่ต้องการรับ JSON object เข้ามาด้วย API ได้
json.dumps()
เป็นฟังก์ชั่นของ JSON ในภาษา Python ที่ใช้สำหรับแปลง Python object เป็น JSON string ในรูปแบบของ string หรือ UTF-8 bytes
โดยมีพารามิเตอร์หลัก 2 ตัว คือ obj
ซึ่งเป็น Python object ที่ต้องการแปลงเป็น JSON string และ indent
ซึ่งใช้กำหนดค่า indent ในการแสดงผล
ตัวอย่าง การใช้งาน json.dumps()
ในการแปลง Python dictionary ให้เป็น JSON string:
import json
person = {"name": "John", "age": 30, "city": "New York"}
person_json = json.dumps(person)
print(person_json)
ผลลัพธ์ที่ได้ คือ
{"name": "John", "age": 30, "city": "New York"}
เราสามารถใช้พารามิเตอร์ indent
เพื่อกำหนดการจัด Format ของ JSON string ที่ได้ เช่น
import json
person = {"name": "John", "age": 30, "city": "New York"}
person_json = json.dumps(person, indent=4)
print(person_json)
ผลลัพธ์ที่ได้ คือ
{
"name": "John",
"age": 30,
"city": "New York"
}
json.loads()
json.loads()
เป็นฟังก์ชันในภาษา Python ที่ใช้แปลงข้อความ JSON ที่อยู่ในรูปแบบ string เป็นโครงสร้างข้อมูล Python (Python data structure) อย่างได้เช่นเดียวกันกับ json.load()
แต่ต่างกันที่ json.load()
รับ input เป็น file object แต่ json.loads()
รับ input เป็น string หรือ JSON text โดยที่ต้องไม่มี syntax error
โดยมีรูปแบบการใช้งานดังนี้
json.loads(s, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
โดยที่:
s
: คือ string หรือ JSON text ที่จะแปลงเป็นโครงสร้างข้อมูล Pythoncls
: คือคลาสที่สืบทอดจากjson.JSONDecoder
ซึ่งจะถูกใช้เมื่อต้องการปรับเปลี่ยนโครงสร้างการแปลงข้อมูลobject_hook
: คือฟังก์ชันที่จะถูกเรียกเมื่อโครงสร้าง JSON object ถูกแปลงเป็นโครงสร้างข้อมูล Python dictionaryparse_float
: คือฟังก์ชันที่จะถูกเรียกเมื่อต้องการแปลงค่า floatparse_int
: คือฟังก์ชันที่จะถูกเรียกเมื่อต้องการแปลงค่า integerparse_constant
: คือฟังก์ชันที่จะถูกเรียกเมื่อต้องการแปลงค่า JSON constant (true
,false
,null
)object_pairs_hook
: คือฟังก์ชันที่จะถูกเรียกเมื่อโครงสร้าง JSON object ถูกแปลงเป็นโครงสร้างข้อมูล Python dictionary โดยใช้วิธีการแปลง pairs
ตัวอย่าง การใช้งาน json.loads()
import json
# ตัวอย่าง JSON string
json_string = '{"name": "Alice", "age": 30}'
# แปลง JSON string เป็น Python dictionary
data = json.loads(json_string)
# แสดงผล
print(data)
ผลลัพธ์ที่ได้ คือ
{'name': 'Alice', 'age': 30}
json.dump()
json.dump()
เป็นฟังก์ชันในโมดูล JSON ของ Python ที่ใช้สำหรับเขียนข้อมูล JSON ลงในไฟล์ โดยรับพารามิเตอร์ที่ต้องการเขียน (object) และไฟล์ที่ต้องการเขียนลง (fp) ซึ่งสามารถเป็นไฟล์เปิด (file-like object) หรือชื่อไฟล์ (file name) ของไฟล์ที่ต้องการเขียน การใช้งานคล้ายกับ json.dumps()
แต่ค่าที่ได้จะถูกเขียนลงในไฟล์แทนที่จะรีเทิร์นเป็นข้อมูลชนิด string
json.dump()
เป็นฟังก์ชันที่ใช้เพื่อเขียนข้อมูลจาก Python object ลงในไฟล์ที่มีรูปแบบ JSON ในภาษา Python
โดยฟังก์ชันนี้จะรับอาร์กิวเมนต์สองตัว คือ ข้อมูลที่ต้องการเขียนลงในไฟล์และไฟล์ที่ต้องการเขียนลงไป ดังนั้นเราสามารถนำ Python object มาแปลงเป็น JSON string ด้วย
json.dumps()
แล้วเขียนลงในไฟล์ได้ด้วยjson.dump()
รูปแบบการใช้งาน json.dump()
คล้ายกับ json.dumps()
แต่จะมีพารามิเตอร์เพิ่มอีกตัวที่ต้องระบุได้แก่ fp
(file pointer) ซึ่งจะเป็นตัวแปรชนิด file object
ที่เปิดไฟล์ JSON ไว้ เพื่อที่จะเขียนไฟล์ JSON ไปยังไฟล์นั้น
รูปแบบการใช้งาน json.dump()
มีดังนี้
import json
with open('file.json', 'w') as f:
json.dump(data, f)
โดยที่ file.json
คือชื่อไฟล์ JSON ที่จะเขียน และ data
คือข้อมูลที่จะถูกเขียนลงในไฟล์ JSON ที่เป็นไฟล์นั้น
ตัวอย่าง การใช้งาน json.dump()
:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
with open('data.json', 'w') as f:
json.dump(data, f)
จากตัวอย่าง เมื่อทำการรันโค้ดนี้ โปรแกรมจะสร้างไฟล์ data.json
และเขียนข้อมูล JSON ที่อยู่ในตัวแปร data
ลงไปในไฟล์นั้น
json.load()
เป็นฟังก์ชันใน Python ที่ใช้สำหรับอ่านข้อมูลจากไฟล์ JSON และแปลงเป็น Python objects ในรูปแบบต่างๆ เช่น dictionary, list, string, integer, boolean, หรือ None ซึ่งใช้คู่กับฟังก์ชัน open()
ในการเปิดไฟล์ JSON ดังนั้นจึงต้องระบุ path ของไฟล์ด้วย
รูปแบบการใช้งาน json.load()
จะเป็นดังนี้
import json
with open('path/to/file.json') as f:
data = json.load(f)
โดยใช้คำสั่ง with open()
เพื่อเปิดไฟล์ JSON ในโหมดอ่าน ('r'
) และกำหนดตัวแปร f
ในการอ้างอิงไฟล์ จากนั้นใช้ json.load(f)
เพื่ออ่านข้อมูลจากไฟล์และแปลงเป็น Python objects ที่เก็บไว้ในตัวแปร data
โดยใช้ with
statement จะช่วยในการปิดไฟล์ JSON อัตโนมัติ หลังจากการอ่านข้อมูลเสร็จสิ้น ทำให้สามารถรักษาความปลอดภัยของข้อมูลและลดโอกาสในการเกิดข้อผิดพลาดในการเปิดไฟล์ JSON ได้
ฟังก์ชัน json.load()
ใช้สำหรับแปลงข้อมูลในรูปแบบ JSON ที่อยู่ในไฟล์ไปเป็นข้อมูลในรูปแบบ Python object ซึ่งเป็นการอ่านข้อมูลจากไฟล์ JSON แล้วแปลงเป็น Python object เพื่อให้สามารถใช้งานได้ในโปรแกรม Python ต่อไปได้
ตัวอย่าง การใช้งาน json.load()
:
สมมติว่ามีไฟล์ชื่อ data.json
ที่มีโครงสร้างข้อมูลดังนี้
{
"name": "John",
"age": 30,
"city": "New York"
}
สามารถเขียนโค้ด จะอ่านข้อมูลจากไฟล์ data.json
ดังนี้
import json
# อ่านข้อมูลจากไฟล์
with open('data.json', 'r') as f:
data = json.load(f)
# แสดงผลลัพธ์
print(data)
ผลลัพธ์ที่แสดงออกมาจะเป็นข้อมูลในรูปแบบ Python object ดังนี้
{'name': 'John', 'age': 30, 'city': 'New York'}
json.JSONEncoder
json.JSONEncoder
เป็นคลาสในโมดูล json
ของภาษา Python ที่ใช้สำหรับการเขียนข้อมูลเป็น JSON ด้วยการ encode object ให้กลายเป็น JSON format ที่ใช้ส่งข้อมูลระหว่างเว็บเซอร์วิส หรือบันทึกข้อมูลลงในไฟล์ โดยมีเมทอดหลักคือ encode()
ซึ่งจะแปลงข้อมูลจาก object ให้เป็น JSON string โดยสามารถ customize การแปลงด้วยการสร้างคลาสสืบทอดจาก json.JSONEncoder
และ override เมทอด default()
ที่จะเรียกใช้ต่อเมื่อพบกับ object ที่ไม่รองรับในการแปลงเป็น JSON
json.JSONEncoder
เป็นคลาสในโมดูล json
ของภาษา Python ที่ใช้สำหรับแปลงข้อมูล Python ให้อยู่ในรูปแบบ JSON โดยสามารถกำหนดค่าการแปลงข้อมูลได้ตามต้องการ โดยคลาส JSONEncoder
จะมีเมธอด encode()
ที่ใช้สำหรับแปลงข้อมูล Python เป็น JSON string ตามรูปแบบที่กำหนดในคลาส JSONEncoder
และสามารถใช้งานได้ทั้งกับ object ใน Python ที่มีรูปแบบซับซ้อน เช่น list, tuple, dict และอื่นๆ
โดยค่า default ของ JSONEncoder
คือการแปลง object ใน Python ตามรูปแบบ JSON แต่สามารถกำหนดเปลี่ยนแปลงได้ตามต้องการ โดยการสืบทอดคลาส JSONEncoder
แล้วแก้ไขเมธอด default()
หรือ encode()
ของคลาสเหล่านั้น
โดยสามารถใช้ json.dumps()
เพื่อเขียนข้อมูลเป็น JSON โดยที่ไม่ต้องกำหนดคลาส Encoder ด้วย ซึ่งฟังก์ชันนี้จะสามารถ encode ได้หลาย type ได้รวมถึง dict, list, tuple, string, int, float, bool, และ None ด้วย
json.JSONEncoder
เป็นคลาสที่ใช้สำหรับสร้าง JSON object จาก Python object โดยเฉพาะอย่างยิ่งใช้สำหรับแปลง Python object ที่ไม่ใช่ dictionary หรือ list เป็น JSON stringโดยปกติแล้ว
json.dumps()
จะใช้json.JSONEncoder
แบบ default อยู่แล้ว ดังนั้นสามารถใช้งานjson.JSONEncoder
โดยการสร้าง subclass แล้ว override methoddefault()
ของjson.JSONEncoder
ให้เป็นรูปแบบที่เราต้องการ
ตัวอย่าง การใช้ json.JSONEncoder
:
import json
class MyEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, set):
return list(o)
return json.JSONEncoder.default(self, o)
data = {'name': 'John', 'age': 30, 'city': 'New York', 'interests': {'music', 'books', 'sports'}}
json_data = json.dumps(data, cls=MyEncoder)
print(json_data)
# output: {"name": "John", "age": 30, "city": "New York", "interests": ["books", "music", "sports"]}
จากตัวอย่างข้างต้น เราสร้าง MyEncoder
สืบทอดจาก json.JSONEncoder
และ override default()
เพื่อเปลี่ยน set
ให้กลายเป็น list
ใน JSON และกำหนดคลาส Encoder ที่เราสร้างเองให้กับ json.dumps()
ซึ่งผลลัพธ์ของการ encode ข้อมูลจะได้ JSON string ที่แปลง set ให้กลายเป็น list ด้วย
json.JSONDecoder
เป็นคลาสในโมดูล json
ในภาษา Python ซึ่งใช้สำหรับแปลงข้อมูลจาก JSON ให้กลายเป็น Python objects (ตัวแปรชนิดต่าง ๆ) ได้ โดยสามารถใช้งานได้ด้วยเมธอด decode()
ซึ่งรับข้อมูล JSON ในรูปแบบของ string และส่งคืน Python object ตามข้อมูล JSON นั้น ๆ
json.JSONDecoder
เป็นคลาสที่ใช้สำหรับแปลง JSON string เป็น Python object โดยมีเมธอดหลักคือdecode()
ซึ่งใช้แปลง JSON string ให้เป็น Python object ในรูปแบบต่าง ๆ ตามได้แก่ dictionary, list, tuple, string, number, boolean, และNone
ตามลำดับ
รูปแบบการใช้งาน json.JSONDecoder
มีดังนี้
import json
# สร้าง JSONDecoder object
decoder = json.JSONDecoder()
# แปลง JSON string เป็น Python object
python_obj = decoder.decode(json_string)
โดยที่ json_string
คือ JSON string ที่ต้องการแปลง ส่วน python_obj
จะเป็น Python object ที่ได้จากการแปลง JSON string
ตัวอย่าง การใช้งาน json.JSONDecoder
:
import json
# JSON data
json_string = '{"name": "John", "age": 30, "city": "New York"}'
# Create a JSON decoder object
decoder = json.JSONDecoder()
# Decode JSON data into Python objects
data = decoder.decode(json_string)
# Print the decoded data
print(data)
ผลลัพธ์ที่ได้ คือ
{'name': 'John', 'age': 30, 'city': 'New York'}
จากตัวอย่าง การสร้าง json.JSONDecoder
object ด้วย json.JSONDecoder()
และเรียกใช้เมธอด decode()
เพื่อแปลงข้อมูล JSON string ในตัวอย่างคือ json_string
ให้กลายเป็น Python object (dictionary) ที่ได้กำหนดไว้ในตัวแปร data