Json Là Gì Và Cách Sử Dụng Trong Python - THỊ GIÁC MÁY TÍNH
Có thể bạn quan tâm
Json là 1 chuẩn dữ liệu đơn giản nhưng cực kỳ hiệu quả trong việc biểu diễn dữ liệu. Với sự gọn nhẹ nhưng rất linh hoạt Json đã được rất nhiều ngôn ngữ lập trình hỗ trợ, đồng thời rất dễ giao tiếp giữa các ngôn ngữ lập trình với nhau.
Bài viết này không đi quá sâu mà chỉ hướng dẫn các bạn hiểu để khai thác sự linh hoạt của Json trong Python.
Để test nhanh các bạn có thể sử dụng Jupyter notebook
Json có cấu trúc như thế nào
Hiểu đơn giản Json có 2 dạng: Object và Array. Object là 1 đối tượng chứa các element trong đó, còn Array chứa nhiều Object. Object được bao trong ngoặc {}, còn Array được bao trong ngoặc [].
Nhưng sự linh hoạt của Json cho phép trong Object có Array, trong Array cũng có thể chứa nhiều Array, tùy theo nhu cầu của bạn. Tuy nhiên hay sử dụng nhất là 1 json object biểu diễn dữ liệu của 1 class.
Khi bạn gọi hàm print(type(object)) thì kết quả là dict, đó là dictionary – kiểu từ điển.
Các ví dụ về sử dụng Json trong Python
Object sinh viên đơn giản
student1 = { "name": "vo hung vi", "birthday" : 1990 }| 1234 | student1={"name":"vo hung vi","birthday":1990} |
Như vậy ta có thể lấy họ tên và năm sinh của sinh viên này bằng cách lấy element có tên là name và birthday:
print(student1["name"]) print(student1["birthday"])| 12 | print(student1["name"])print(student1["birthday"]) |
Array lớp học tại Đại học Cần Thơ có nhiều object sinh viên
classA = [ {"name": "vo hung vi", "birthday" : 1990}, {"name": "nguyen van A", "birthday" : 1991} ]| 1234 | classA=[{"name":"vo hung vi","birthday":1990},{"name":"nguyen van A","birthday":1991}] |
Như vậy ta có lớp k32 có 2 sinh viên, để lấy sinh viên 1 và 2 (index là 0 và 1):
student1 = k32[0] student2 = k32[1]| 12 | student1=k32[0]student2=k32[1] |
Kiểu array của trường dữ liệu Ta có 1 sinh viên có nhiều lần làm lại CMND và vẫn giữ nguyên số, vậy trường CMND là 1 Array của sinh viên đó
student1 = { "name": "vo hung vi", "birthday" : 1990, "CMND" : [ {"CMND_num" : "0001222211", "date" : "01/01/2000"}, {"CMND_num" : "0001222211", "date" : "02/02/2001"}, ] } CMND1 = student1["CMND"][0] CMND2 = student1["CMND"][1] print(CMND1) print(CMND2)| 12345678910111213 | student1={"name":"vo hung vi","birthday":1990,"CMND":[{"CMND_num":"0001222211","date":"01/01/2000"},{"CMND_num":"0001222211","date":"02/02/2001"},]} CMND1=student1["CMND"][0]CMND2=student1["CMND"][1]print(CMND1)print(CMND2) |
➡ {'CMND_num': '0001222211', 'date': '01/01/2000'} {'CMND_num': '0001222211', 'date': '02/02/2001'}
Đếm số Object trong Array Chỉ cần sử dụng hàm len() là biết được số lượng sinh viên trong lớp
k32 = [ {"name": "vo hung vi", "birthday" : 1990}, {"name": "nguyen van A", "birthday" : 1991} ] print(len(k32))| 12345 | k32=[{"name":"vo hung vi","birthday":1990},{"name":"nguyen van A","birthday":1991}]print(len(k32)) |
➡ 2
Đếm số Element trong Object Ta cũng dùng hàm len() là được
student1 = { "name": "vo hung vi", "birthday" : 1990, "what" : 1990 } print(len(student1))| 1234567 | student1={"name":"vo hung vi","birthday":1990,"what":1990} print(len(student1)) |
➡ 3
Vòng lặp qua các object trong mảng
k32 = [ {"name": "vo hung vi", "birthday" : 1990}, {"name": "nguyen van A", "birthday" : 1991} ] for student in k32: print(student)| 1234567 | k32=[{"name":"vo hung vi","birthday":1990},{"name":"nguyen van A","birthday":1991}] forstudent ink32:print(student) |
➡ {'name': 'vo hung vi', 'birthday': 1990} {'name': 'nguyen van A', 'birthday': 1991}
Vòng lặp qua các object trong mảng kèm theo index Sử dụng enumerate là được
k32 = [ {"name": "vo hung vi", "birthday" : 1990}, {"name": "nguyen van A", "birthday" : 1991} ] for i, student in enumerate(k32): print(i, student)| 1234567 | k32=[{"name":"vo hung vi","birthday":1990},{"name":"nguyen van A","birthday":1991}] fori,student inenumerate(k32):print(i,student) |
➡ 0 {'name': 'vo hung vi', 'birthday': 1990} 1 {'name': 'nguyen van A', 'birthday': 1991}
Sắp xếp các object trong array Ví dụ có danh sách các sinh viên trong lớp, muốn sắp xếp theo điểm giảm dần thì làm như sau:
k32 = [ {"name": "Vo Hung Vi", "birthday" : 1990, "score" : 3.2}, {"name": "Nguyen Van A", "birthday" : 1991, "score" : 3.6}, {"name": "Tran Thi B", "birthday" : 1991, "score" : 3.0} ] sorted = sorted(k32, key=lambda x: x["score"], reverse=True) print(sorted)| 12345678 | k32=[{"name":"Vo Hung Vi","birthday":1990,"score":3.2},{"name":"Nguyen Van A","birthday":1991,"score":3.6},{"name":"Tran Thi B","birthday":1991,"score":3.0}]sorted=sorted(k32,key=lambdax:x["score"],reverse=True)print(sorted) |
➡ [{'name': 'Nguyen Van A', 'birthday': 1991, 'score': 3.6}, {'name': 'Vo Hung Vi', 'birthday': 1990, 'score': 3.2}, {'name': 'Tran Thi B', 'birthday': 1991, 'score': 3.0}]
Chuyển đổi
Chuyển json thành string Chỉ cần ép kiểu qua str() là được hoặc dùng json.dumps()
student1 = { "name": "vo hung vi", "birthday" : 1990 } jsonStr = str(student1) print(jsonStr) jsonStr2 = json.dumps(student1) print(jsonStr2)| 123456789 | student1={"name":"vo hung vi","birthday":1990}jsonStr=str(student1)print(jsonStr) jsonStr2=json.dumps(student1)print(jsonStr2) |
Load string thành json object Bạn cần phải import json để load, lưu ý với nháy đơn và nháy kép thì cách gọi khác nhau, nếu không sẽ bị lỗi. Lưu ý: đúng chuẩn của json là ‘{“element” : “value”}’ import json import ast str1 = "{'name': 'vo hung vi', 'birthday' : 1990}" #sai chuẩn obj1 = ast.literal_eval(str1) print(obj1) str2 = '{"name": "vo hung vi", "birthday" : 1990}' #đúng chuẩn obj2 = json.loads(str2) print(obj2) Save json object xuống file Load json object từ file Tìm kiếm giá trị đã tồn tại hay chưa ➡ [{'name': 'a', 'count': 1}] Tìm index của object chứa giá trị cần tìm, nếu không thấy thì trả về -1 ➡ 0 Trong danh sách đoạt giải thể thao có danh sách như bên dưới, tổng hợp lại mỗi người đoạt bao nhiêu huy chương ➡ {'Alice': 2, 'Bob': 2, 'Charlie': 1} Với những example trên mình nghĩ là đủ cho các bạn sử dụng trong 1 số project đơn giản. Và quan trọng nhất là các bạn sẽ thấy json thật dễ dàng sau khi thử thực hành.
123456789 import jsonimport aststr1="{'name': 'vo hung vi', 'birthday' : 1990}"#sai chuẩnobj1=ast.literal_eval(str1)print(obj1) str2='{"name": "vo hung vi", "birthday" : 1990}'#đúng chuẩnobj2=json.loads(str2)print(obj2) Đọc ghi file json
12345 import jsonobj={"name":"Võ Hùng Vĩ","birthday":1990} with open('json_string.json','w',encoding='utf-8')asf:json.dump(obj,f,ensure_ascii=False)
12345678 import json obj=Nonewith open('json_string.json',encoding='utf-8')asf:obj=json.load(f) if(obj!=None):print(obj) Tìm kiếm trong array json
1234567 arr=[{"name":"a","count":1},{"name":"b","count":2},{"name":"c","count":3},] existObj=[obj forobj inarr ifobj['name']=='a']
12345678 arr=[{"name":"a","count":1},{"name":"b","count":2},{"name":"c","count":3},] index=next((ifori,item inenumerate(arr)ifitem["name"]=="a"),-1)print(index)
12345678910111213 from collections import Counter students=[{"name":"Alice","medal":"gold","sport":"football"},{"name":"Bob","medal":"silver","sport":"swimming"},{"name":"Alice","medal":"bronze","sport":"football"},{"name":"Charlie","medal":"silver","sport":"athletics"},{"name":"Bob","medal":"gold","sport":"football"},] student_counts=dict(Counter(student['name']forstudent instudents))print(student_counts) Tổng kết
Từ khóa » Thư Viện Json Trong Python
-
Xử Lý Json Với Python Như Thế Nào - CodeLearn
-
Hướng Dẫn Lập Trình Với JSON Trong Python - NIIT - ICT Hà Nội
-
JSON Trong Python (P1) - Viblo
-
Chi Tiết Bài Học 25.Python JSON - Vimentor
-
Xử Lý Chuỗi JSON Trong Python - Freetuts
-
Làm Việc Với JSON Trong Python - 40+ Bài Học Python Miễn Phí
-
Đọc Và Ghi File Json Python
-
[Python Cơ Bản Thường Dùng Trong Công Việc] Phần 7 : Xử Lý File JSON
-
Phân Tích Cú Pháp Dữ Liệu JSON Bằng Python
-
Python JSON: Mã Hóa (kết Xuất), Giải Mã (tải) & Đọc Tệp JSON
-
Cách Chuyển đổi Danh Sách Python Sang Json
-
Xử Lý File JSON Và File XML Trong Python - AI Design - Thiết Kế Web ...
-
Làm Việc Với Dữ Liệu JSON Bằng Python
-
Chuyển đổi (convert) Dữ Liệu JSON Sang Dữ Liệu XML Trong Python