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

   By: Withoutcoffee Icantbedev

   อัปเดตล่าสุด April 29, 2023

สอนใช้งาน 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'>


ตารางเปรียบเทียบการแปลง 

PythonJSON
dictObject
tupleArray
listArray
intNumber
floatNumber
strString
Truetrue
Falsefalse

เพิ่มเติม: ขาดไปอีก 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'>

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 จะมีไฟล์มาเกี่ยวข้อง


เปิดโลกการเขียนโปรแกรมและ Software Development ด้วย online courses ที่จะพาคุณอัพสกิลและพัฒนาสู่การเป็นมืออาชีพ เรียนออนไลน์ เรียนจากที่ไหนก็ได้ พร้อมซัพพอร์ตหลังเรียน

เรียนเขียนโปรแกรม