สรุป JSON แบบกระชับ
ตัวอย่างข้อมูล 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 แบบกระชับ
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 คือ
กระบวนการในการแปลง Python Object ไปเป็น JSON ฟอร์แมต เพื่อทำการส่งต่อข้อมูล (Transmit) หรือเรียกอีกอย่างหนึ่งในทำนองของการ Encoding
กระบวนการในการแปลง JSON Object ให้อยู่ในรูปของชนิดข้อมูล (Data Type) แบบ dict ของภาษาไพธอน เพื่อทำการรับข้อมูล (Receive) เข้ามาเพื่อใช้งานต่อไป
คือการแปลง 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)
การใช้งาน
import json # สร้าง 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))
เมื่อทำการปริ้นซ์แสดงผลดูชนิดข้อมูลจะเห็นว่า ก่อนที่จะทำการแปลงข้อมูลยังเป็น dict อยู่และเมื่อทำการแปลงแล้วก็กลายเป็น string (JSON String) ทันที
<class 'dict'>
{"name": "Python", "author": "Guido Van Rossum", "year": 1990, "frameworks": ["Flask", "Django"], "libraries": ["Pandas", "Numpy", "Matplotlib", "Requests"]}
<class 'str'>
คือการแปลง 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
จะเห็นว่าก่อนแปลงนั้น ข้อมูลยังเป็นแบบ string หลังจากแปลงมาเป็น Python Object ก็จะได้เป็น dict
<class 'str'>
{'name': 'Python', 'author': 'Guido Van Rossum', 'year': 1990, 'frameworks': ['Flask', 'Django'], 'libraries': ['Pandas', 'Numpy', 'Matplotlib', 'Requests']}
<class 'dict'>
Python
คือการแปลง 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)
การใช้งาน
import json # สร้าง 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))
{"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 ที่เป็นระเบียบและอ่านง่ายดังภาพด้านล่าง
ข้อมูลถูกจัดอยู่ในฟอร์แมตที่เป็นระเบียบและอ่านง่าย
คือการแปลง 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)
การใช้งาน
import json # อิมพอร์ตและเปิด 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))
Python {'name': 'Python', 'author': 'Guido Van Rossum', 'year': 1990, 'frameworks': ['Flask', 'Django'], 'libraries': ['Pandas', 'Numpy', 'Matplotlib', 'Requests']} <class 'dict'>
ทดสอบดึงข้อมูลจาก Web API โดยขออ้างอิงจากบทความ Deploy Flask App to Heroku โดยสามารถดึง API จาก URL นี้ ซึ่งข้อมูลที่อยู่ใน URL นี้จะเป็นในรูปแบบ JSON Array คือ
ซึ่ง Python ก็มีหนึ่งในไลบรารี่ที่ได้รับความนิยมสูงสุดคือ requests อ่านเพิ่มเติมเกี่ยวกับ requests ได้ในบทความ Python Web Scraping
ติดตั้ง requests
$ pip install requests
การใช้งาน
import requests import json url = requests.get("https://stackpython-flask-heroku.herokuapp.com/api") print(url) # Response status code, 200 is success print(url.content) # Display all objects print(type(url.content)) # Type is still "bytes" json_string = url.content # Assign new variable convert_to_list = json.loads(json_string) # Convert JSON Array to Python list print(convert_to_list) print(type(convert_to_list))
<Response [200]> b'[{"id":1,"language":"Python","library":"Pandas"},{"id":2,"language":"Python","library":"requests"},{"id":3,"language":"Python","library":"NumPy"},{"id":4,"language":"Python","library":"TensorFlow"}]\n' <class 'bytes'> [{'id': 1, 'language': 'Python', 'library': 'Pandas'}, {'id': 2, 'language': 'Python', 'library': 'requests'}, {'id': 3, 'language': 'Python', 'library': 'NumPy'}, {'id': 4, 'language': 'Python', 'library': 'TensorFlow'}] <class 'list'>
ทำการวนลูปข้อมูลออกมาแสดงผล
for i in convert_to_list: print(i)
{'id': 1, 'language': 'Python', 'library': 'Pandas'} {'id': 2, 'language': 'Python', 'library': 'requests'} {'id': 3, 'language': 'Python', 'library': 'NumPy'} {'id': 4, 'language': 'Python', 'library': 'TensorFlow'}
สรุป Python JSON และกระบวนการต่าง ๆ ครบจบในภาพเดียว
ภาพนี้น่าจะทำให้เห็นภาพรวมได้ชัดเจนยิ่งขึ้น
Note: ข้อสังเกตระหว่างเมธอด loads และ dumps ที่เติม s จะไม่เกี่ยวกับการจัดการไฟล์ แต่ถ้าเป็นเมธอดที่ไม่เติม s คือ load และ dump จะมีไฟล์มาเกี่ยวข้อง
สำหรับบทความการใช้งาน Python ร่วมกับ JSON ก็ขอจบลงเพียงเท่านี้ พบกันกับบทความถัดไป See ya, next article
Follow us on
Medium: STACKPYTHON
Youtube: STACKPYTHON
Facebook: STACKPYTHON
| Like | Comment | Share | >> STACKPYTHON
References
[ Python Docs ] - Getting started on Heroku with Python
[ Real Python ] - Working with JSON data in Python
[ Programmize. ] - Python JSON
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน Feb. 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมหลักสูตรแรกของปี 2023 หลักสูตร Django Bootcamp 2023 - จำกัดแค่ 20 ที่นั่ง - เรียนสด 1 วันเต็ม ที่ออฟฟิศลุงวิศวกรสอนคำนวณ ติด BTS สนามเป้า กรุงเทพ ฯ - เรียนออนไลน์อีก 2 วัน - ทำเว็บเป็นในคอร์สนี้ ย่อยมาให้แล้วจากประสบการณ์สอนมากกว่า 10 รุ่น รวมทั้งประสบการณ์ในงานจริง ไม่ต้องเสียเวลาลองผิดลองถูก - รับโบนัสคอร์สออนไลน์กว่า 10 คอร์ส มูลค่าคอร์สละ 2,500 บาท ทันที