สอนใช้งาน Python JSON ครบในบทความเดียว

บทความนี้เราจะมาแนะนำวิธีการใช้งาน Python ร่วมกับ JSON แบบครอบคลุมในหลาย ๆ ส่วนที่จำเป็น เช่น การแปลงข้อมูลระหว่าง Python และ JSON ในรูปแบบต่าง ๆ ครบในบทความเดียว
JSON (JavaScript Object Notation) คือหนึ่งในมาตรฐานการแลกเปลี่ยนข้อมูล (Data Format Interchange) ที่ได้รับความนิยมสูงสุดในปัจจุบัน โดยเก็บข้อมูลในรูปแบบของ Key-Value pairs ด้วยรูปแบบการเก็บข้อมูลที่เข้าใจง่าย ไม่ซับซ้อน
Dictionary คือ ชนิดข้อมูลของไพธอน (Python Data Type) ที่มีลักษณะคล้ายคลึงกันกับ JSON มาก โดยเก็บข้อมูลในรูปแบบของ Key-Value pairs
JSON
สรุป JSON แบบกระชับ
- เป็นฟอร์แมตในการแลกเปลี่ยนข้อมูลระหว่าง Server และ Application/Client ได้รับความนิยมสูงสุดในปัจจุบัน
- ใช้งานง่าย Syntax ไม่ยุ่งยาก
- เก็บข้อมูลในรูปแบบของ key-value
ตัวอย่างข้อมูล Covid-19 ของกรมควบคุมโรค กระทรวงสาธารณสุข
covid19.json
{
"Confirmed": 3818,
"Recovered": 3639,
"Hospitalized": 120,
"Deaths": 59,
"NewConfirmed": 8,
"NewRecovered": 16,
"NewHospitalized": -8,
"NewDeaths": 0,
"UpdateDate": "06/11/2020 11:09",
"Source": "https://covid19.th-stat.com/",
"DevBy": "https://www.kidkarnmai.com/",
"SeverBy": "https://smilehost.asia/"
}
ตัวอย่างการนำข้อมูล JSON มาใช้งานแสดงผลผ่านหน้าเว็บ
ตัวอย่างการดึง API ที่อยู่ในรูปแบบของ JSON มาแสดงผลผ่านหน้าเว็บ
Dictionary
สรุป Dictionary แบบกระชับ
- เป็นชนิดของข้อมูล (Data Type) ในภาษาไพธอน
- เก็บข้อมูลในรูปแบบของ Key-Value
ใช้งาน JSON บน Python
Python มี Built-in module ที่ถูกสร้างมาเพื่อให้สามารถใช้งานและจัดการเกี่ยวกับ JSON มาให้เรียบร้อย โดยสามารถใช้งานได้ด้วยการอิมพอร์ตโมดูลที่มีชื่อว่า json เข้ามาใช้งาน
import json
ทำการสร้างตัวแปร obj เพื่อเก็บออปเจคท์ จากนั้นใช้คำสั่งแสดงผล print(type(obj)) เพื่อแสดงผลประเภทของข้อมูล ซึ่งแน่นอนว่าจะได้เป็น Dictionary
obj = {'name': 'sonny',
'age': 28}
print(type(obj))
Output
<class 'dict'>
ตารางเปรียบเทียบการแปลง
Python | JSON |
dict | Object |
tuple | Array |
list | Array |
int | Number |
float | Number |
str | String |
True | true |
False | false |
เพิ่มเติม: ขาดไปอีก 1 คือ
- None (Python) --> null (JSON)
Serialization คือ ?
กระบวนการในการแปลง Python Object ไปเป็น JSON ฟอร์แมต เพื่อทำการส่งต่อข้อมูล (Transmit) หรือเรียกอีกอย่างหนึ่งในทำนองของการ Encoding
Deserialization คือ ?
กระบวนการในการแปลง JSON Object ให้อยู่ในรูปของชนิดข้อมูล (Data Type) แบบ dict ของภาษาไพธอน เพื่อทำการรับข้อมูล (Receive) เข้ามาเพื่อใช้งานต่อไป
json.dumps()
คือการแปลง Python Object (Dict) ไปเป็น JSON String หรือ Object ทำได้โดยเรียกใช้เมธอด json.dumps()
parameters และ arguments (จาก Python Documentation)
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)
การใช้งาน
# สร้าง Python Dict สตริงขึ้นมาพื่อทดสอบ
prog_dict = {
"name": "Python",
"author": "Guido Van Rossum",
"year": 1990,
"frameworks": [
"Flask", "Django"
],
"libraries": [
"Pandas", "Numpy",
"Matplotlib", "Requests"
]
}
print(type(prog_dict))
prog_string = json.dumps(prog_dict) # แปลง Python Dict ไปเป็น JSON String
print(prog_string)
print(type(prog_string))
Code Description
- สร้างตัวแปร prog_dict เพื่อทำการเก็บค่า Python Object (dict)
- ลองทดสอบดูชนิดของข้อมูลโดยใช้คำสั่ง type() ซึ่งแน่นอนว่า ข้อมูลที่ได้นั้นก็คือ dict ของตัวแปร prog_dict
- เรียกใช้คำเมธอด json.dumps() เพื่อแปลง Python Object ไปเป็น JSON สตริง โดยต้องทำการส่ง Python Object นั่นก็คือตัวแปร prog_dict เข้าไปในเมธอดนี้ด้วย
เมื่อทำการปริ้นซ์แสดงผลดูชนิดข้อมูลจะเห็นว่า ก่อนที่จะทำการแปลงข้อมูลยังเป็น dict อยู่และเมื่อทำการแปลงแล้วก็กลายเป็น string (JSON String) ทันที
Output
<class 'dict'>
{"name": "Python", "author": "Guido Van Rossum", "year": 1990, "frameworks": ["Flask", "Django"], "libraries": ["Pandas", "Numpy", "Matplotlib", "Requests"]}
<class 'str'>
Code Description
- สร้างตัวแปร prog_dict เพื่อทำการเก็บค่า Python Object (dict)
- ลองทดสอบดูชนิดของข้อมูลโดยใช้คำสั่ง type() ซึ่งแน่นอนว่า ข้อมูลที่ได้นั้นก็คือ dict ของตัวแปร prog_dict
- เรียกใช้คำเมธอด json.dumps() เพื่อแปลง Python Object ไปเป็น JSON สตริง โดยต้องทำการส่ง Python Object นั่นก็คือตัวแปร prog_dict เข้าไปในเมธอดนี้ด้วย
เมื่อทำการปริ้นซ์แสดงผลดูชนิดข้อมูลจะเห็นว่า ก่อนที่จะทำการแปลงข้อมูลยังเป็น dict อยู่และเมื่อทำการแปลงแล้วก็กลายเป็น string (JSON String) ทันที
Output
<class 'dict'>
{"name": "Python", "author": "Guido Van Rossum", "year": 1990, "frameworks": ["Flask", "Django"], "libraries": ["Pandas", "Numpy", "Matplotlib", "Requests"]}
<class 'str'>
json.loads()
คือการแปลง JSON String ไปเป็น Python Object (Dict) ทำได้โดยเรียกใช้เมธอด
json.loads()
parameters และ arguments (จาก Python Documentation)
json.loads(s, *, cls=None,
object_hook=None, parse_float=None,
parse_int=None, parse_constant=None,
object_pairs_hook=None, **kw)
การใช้งาน
import json
# สร้าง JSON สตริงขึ้นมาพื่อทดสอบ
prog_string = '{
"name": "Python",
"author": "Guido Van Rossum",
"year": 1990,
"frameworks": [
"Flask", "Django"
],
"libraries": [
"Pandas",
"Numpy",
"Matplotlib",
"Requests"
]
}'
print(type(prog_string))
prog_dict = json.loads(prog_string) # แปลง JSON string เป็น Python Dictionary (dict)
print(prog_dict)
print(type(prog_dict))
print(prog_dict["name"]) # เข้าถึงข้อมูลใน dict ของคีย์ name
Code Description
- สร้างตัวแปร prog_string เพื่อทดสอบเก็บข้อมูลในรูปแบบของสตริงขึ้นมา ก่อนทำการแปลงไปเป็น Python Object
- เรียกใช้เมธอด json.loads() เพื่อทำการแปลง JSON String เป็น Python Object (dict)
จะเห็นว่าก่อนแปลงนั้น ข้อมูลยังเป็นแบบ string หลังจากแปลงมาเป็น Python Object ก็จะได้เป็น dict
Output
<class 'str'>
{'name': 'Python', 'author': 'Guido Van Rossum', 'year': 1990, 'frameworks': ['Flask', 'Django'], 'libraries': ['Pandas', 'Numpy', 'Matplotlib', 'Requests']}
<class 'dict'>
Python
json.dump()
คือการแปลง Python Object (Dict) ไปเป็น JSON ทำได้โดยเรียกใช้งานเมธอด json.dump()
parameters และ arguments (จาก Python Documentation)
json.dump(obj, fp, *, skipkeys=False,
ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None,
indent=None, separators=None,
default=None, sort_keys=False, **kw)
การใช้งาน
# สร้าง Python Dict สตริงขึ้นมาพื่อทดสอบ
prog_dict = {
"name": "Python",
"author": "Guido Van Rossum",
"year": 1990,
"frameworks": [
"Flask",
"Django"
],
"libraries": [
"Pandas",
"Numpy",
"Matplotlib",
"Requests"
]
}
with open('data.json', 'w') as json_file:
json.dump(prog_dict, json_file) # เขียน Python Dict ลงในไฟล์ data.json
print(type(prog_dict))
Code Description
- ฟังก์ชัน open() ทำการส่ง Arguments เข้าไป 2 ตัว คือ data.json ซึ่งเป็นชื่อไฟล์ที่กำหนดขึ้นมาเพื่อทำการบันทึกข้อมูลลงไป และ 'w' ซึ่งเป็นโหมดการเขียนไฟล์ (Write)
- คือ json_file นามแฝง (Alias Name) ของไฟล์ที่กำหนดขึ้นมาเพื่อเรียกแทนชื่อไฟล์ ซึ่งจะกำหนดเป็นชื่ออะไรก็ได้ตามต้องการ เพียงแต่ควรให้เป็นชื่อที่สื่อความหมาย (Meaningful Name)
- json.dump() เป็นเมธอดที่ใช้สำหรับแปลง Python Object เป็น JSON (เก็บในรูปของไฟล์) โดยในเมธอด json.dump() นี้ต้องการ 2 อากิวเมนต์ในเบื้องต้นคือ Python Object นั่นก็คือตัวแปร prog_dict และตัวที่ 2 ก็คือ json_file
Output
{"name": "Python", "author": "Guido Van Rossum", "year": 1990, "frameworks": ["Flask", "Django"], "libraries": ["Pandas", "Numpy", "Matplotlib", "Requests"]}
จะเห็นว่าได้ไฟล์ data.json มาเรียบร้อย แต่ยังอ่านยากเพราะอยู่ในแถวเดียวกันหมด ดังนั้นจึงมีอีกหนึ่งอากิวเมนต์ที่เราสามารถช่วยให้ไฟล์ json นั้นเป็นระเบียบและอ่านง่าย โดยใช้ indent เข้ามาช่วย และทำการใส่ค่าเข้าไปคือ 4
with open('data.json', 'w') as json_file: json.dump(prog_dict, json_file, indent=4) # New
จะได้ไฟล์ data.json ที่เป็นระเบียบและอ่านง่ายดังภาพด้านล่าง
{
"name": "Python",
"author": "Guido Van Rossum",
"year": 1990,
"frameworks": [
"Flask",
"Django"
],
"libraries": [
"Pandas",
"Numpy",
"Matplotlib",
"Requests"
]
}
ข้อมูลถูกจัดอยู่ในฟอร์แมตที่เป็นระเบียบและอ่านง่าย
json.load()
คือการแปลง JSON ไปเป็น Python Object (Dict) ทำได้โดยเรียกใช้งานเมธอด json.load()
parameters และ arguments (จาก Python Documentation)
json.load(fp, *, cls=None,
object_hook=None, parse_float=None,
parse_int=None, parse_constant=None,
object_pairs_hook=None, **kw)
การใช้งาน
# อิมพอร์ตและเปิด JSON file จาก path ที่อยู่ของไฟล์
with open('data.json') as json_file:
prog_dict = json.load(json_file) # แปลง JSON ไฟล์ เป็น Python Dict
print(prog_dict['name']) # เข้าถึงข้อมูลใน key ที่ต้องการ
print(prog_dict)
print(type(prog_dict))
Code Description
- ทำการเปิดไฟล์ data.json ที่ได้ทำการเขียนขึ้นมาก่อนหน้านี้ โดยไฟล์ต้องอยู่ในระดับเดียวกันกับไพธอนไฟล์ที่กำลังเขียน คืออยู่ใน root directory
- ทำการเรียกใช้เมธอด json.load() เพื่อแปลง JSON เป็นไพธอน dict
- ทำการเข้าถึงข้อมูลที่อยู่ในคีย์ของ dict ที่ต้องการ เช่น prog_dict['name'] จะเป็นการเข้าถึงและแสดงผลข้อมูลที่อยู่ในคีย์ 'name' นั่นก็คือ Python นั่นเอง
Output
Python
{'name': 'Python', 'author': 'Guido Van Rossum', 'year': 1990, 'frameworks': ['Flask', 'Django'], 'libraries': ['Pandas', 'Numpy', 'Matplotlib', 'Requests']}
<class 'dict'>
สรุป Python JSON และกระบวนการต่าง ๆ ครบจบในภาพเดียว
ภาพนี้น่าจะทำให้เห็นภาพรวมได้ชัดเจนยิ่งขึ้น
สรุป
- JSON คือหนึ่งรูปแบบการแลกเปลี่ยนข้อมูลที่ได้รับความนิยมสูงสุดในปัจจุบัน
- ใน Python มีโมดูลที่จัดการเกี่ยวกับ JSON ให้เรียบร้อยคือ json sdd
- json.loads คือ การเมธอดในการแปลง JSON string ให้เป็น Python Object (Dict)
- json.dumps() คือ การแปลง JSON string ให้เป็น Python Object (Dict)
- json.load() คือ การแปลง JSON Object ที่อยู่ในไฟล์ ให้เป็น Python Object (Dict) --> การอ่านไฟล์ JSON
- json.dump() คือ การแปลง Python Object ให้เป็น JSON Object (เก็บข้อมูลให้อยู่ในไฟล์ .json) --> เขียนไฟล์ JSON
- Serialization คือ กระบวนการหรือคำนิยามสำหรับการแปลง Python Object ไปเป็น JSON ฟอร์แมต เพื่อทำการส่งต่อข้อมูล (Transmit) หรือเรียกอีกอย่างหนึ่งในทำนองของการ Encoding
- Deserialization คือ กระบวนการหรือคำนิยามในการแปลง JSON Object ให้อยู่ในรูปของชนิดข้อมูล (Data Type) แบบ dict ของภาษาไพธอน ในทำนอง Decoding
Note: ข้อสังเกตระหว่างเมธอด loads และ dumps ที่เติม s จะไม่เกี่ยวกับการจัดการไฟล์ แต่ถ้าเป็นเมธอดที่ไม่เติม s คือ load และ dump จะมีไฟล์มาเกี่ยวข้อง