Tìm hiểu về JSON và sự khác nhau giữa JSON và Dictionary trong Python

Chào mọi người, sau bài viết đầu tiên của em thì em đã nhận được một comment, trong đó có một câu hỏi của a Tommy là “kiểu dữ liệu dict trên Python và BSON hoặc JSON thì khác nhau như thế nào, trong trường hợp nào chúng ta nên sử dụng dict, BSON hay JSON :))”. Để trả lời câu hỏi này, trước tiên chúng ta cần biết JSON là gì?, Sử dụng JSON trong Python như thế nào?Sự khác nhau giữa JSON với kiểu dữ liệu Dictionary trong Pythoy như thế nào?.

JSON là gì?

  • JSON (JavaScript Object Notation) là một kiểu định dạng dữ liệu chuẩn trong đó sử dụng văn bản thuần túy để trao đổi dữ liệu. Ban đầu, JSON được phát triển để dành phục vụ cho ứng dụng viết bằng JavaScript, tuy nhiên vì JSON là một định dạng dữ liệu nên nó có thể sử dụng bởi nhiều ngôn ngữ mà không bị giới hạn với JavaScript.
  • Cú pháp của JSON: viết dưới dạng key và value:
{
..."Key1": "Value1",
..."Key2": "Value2",
}
  • Nhìn vào cú pháp ta có thể thấy JSON rất giống với kiểu dữ liệu Dictionary trong Python (chúng ta sẽ tìm hiểu về sự khác nhau ở phần sau). Và trong Python có hỗ trợ thư viện sẵn có với tên JSON. Giờ chúng ta sẽ đi vào tìm hiểu việc sử dụng JSON trong Python như thế nào nhé.

Sử dụng JSON trong Python như thế nào?

  • Về cơ bản, JSON được sử dụng để mã hóa và giải mã dữ liệu. Quá trình mã hóa dữ liệu JSON được gọi là tuần tự hóa, nó sẽ chuyển đổi dữ liệu thành một chuỗi byte có thể được lưu trữ và truyền giữa các máy chủ và các ứng dụng web.
  • Để sử dụng JSON, đầu tiên ta cần gọi thư viện JSON trong chương trình:
import json
  • Và trong thư viện json có sẵn các phương thức dùng để thao tác đến JSON như mã hóa và giải mã.
    1.Mã hóa dữ liệu Python sang JSON
    …Các đối tượng Python sẽ được dịch sang đối tượng JSON tương ứng theo bảng sau:
    | Python | JSON |
    | ----------------------- | ------------------------:expressionless:
    | dict | object |
    | list, tuple | array |
    | str | string |
    | int, long, float | number |
    | True | true |
    | False | false |
    | None | null |
    Chuyển đổi dữ liệu Python thành JSON được gọi là thao tác mã hóa. Ta có thể sử dụng phương thức dumps() trong thư viện json.
    Phương thức dumps() chuyển đổi đối tượng từ điển của Python thành định dạng dữ liệu chuỗi JSON.
    Ví dụ về mã hóa:
import json
x = {
   "Student": {
                     "name" : "Charlie",
                     "age": 20,
                     }
       }
str_json = json.dumps(x)
print(str_json)

Và đây là kết quả:

{"Student": {"name": "Charlie", "age": 20}}

Trong phương thức dumps() có các đối số như indent dùng để chỉ định kích thước thụt dòng, hay sort_keys sắp xếp từ điển theo từ khóa nếu sort_keysTrue (mặc định là False).
Cú pháp: dumps(object, indent, sort_keys).
Ngoài phương thức dumps(), ta còn có phương thức dump() để mã hóa chuỗi ghi trong tệp.
2. Giải mã
Ta có thể sử dụng phương thức loads() hoặc **load() của thư viện json trong Python để đọc chuỗi JSON.
Giống như mã hóa, giải mã cũng có một bảng chuyển đổi từ JSON sang Python:

JSON Python
object dict
'array |list`
string str
number (int) int
number (real) float
true True
false False
null None

Chuyển đổi này không hẳn là nghịch đạo của bảng mã hóa. Đôi khi bạn mã hóa đối tượng và sau đó giải mã lại nó, bạn có thể không nhận đươc chính xác đối tượng đó.
Chúng ta cùng xem một ví dụ về giải mã:

import json
#json data string
student_data = '{  "Student":  { "name": "Charlie", "age": 20}}'
#decoding JSON format to dict using loads()
dict_student = json.loads(student_data)
print(dict_student)
#check type of dict_student
print("Type of object: ", type(dict_student))
#check student object detail
print("Student: ", dict_student.get('Student')['name'])

Kết quả:

{'Student': {'name': 'Charlie', 'age': 20}}
Type of object:  <class 'dict'>
Student:  Charlie

Đối với phương thức load() dùng để giải mã trong khi đọc tệp JSON.

Trên đây là một về tìm hiểu cơ bản về JSON trong Python.

Sự khác nhau giữa JSON với kiểu dữ liệu Dictionary trong Pythoy như thế nào?

  1. Nếu không tồn tại key, kiểu dict sẽ báo lỗi khi gọi dict_name[key], còn nếu gọi dict.get(key) sẽ trả về None trong khi JSON sẽ trả về Null.
  2. Dictionary trong Python được hiểu như một container chứa các dữ liệu và thao tác với các dữ liệu, trong khi JSON về bản chất dùng để mã hóa và giải mã dữ liệu, tức là nó sẽ chuyển đổi dữ liệu thành một chuỗi byte có thể lưu trữ và truyền qua mạng, dùng để response cho API. Và ta dùng JSON khi muốn lưu dữ liệu ở phía server.

Kết luận:

Trên đầy là tìm hiểu của em về những điều cơ bản về JSON, sử dụng JSON trong Python và sự khác nhau của JSON và kiểu dữ liệu Dictionary trong Python.

4 Likes

Very good @anon73939363. Bài viết này em viết tốt hơn rất nhiều, khiến anh cũng bất ngờ lắm nhé.
Chắc đọc xong anh @anon19898721 cũng sẽ thích thú lắm đó :grin: :grin: :grin: