Hướng dẫn python json storage - bộ lưu trữ python json

JSON là gì?

JSON là một định dạng chuẩn để trao đổi dữ liệu, được lấy cảm hứng từ JavaScript. Về cơ bản, JSON ở dạng chuỗi hoặc văn bản. JSON là viết tắt của Java Script Object Notation. là một định dạng chuẩn để trao đổi dữ liệu, được lấy cảm hứng từ JavaScript. Về cơ bản, JSON ở dạng chuỗi hoặc văn bản. JSON là viết tắt của Java Script Object Notation.

Cú pháp của JSON: JSON được viết dưới dạng cặp khóa và giá trị.

{
    "Key1": "Value1",
    "Key2": "Value2",
}

JSON rất giống với kiểu dữ liệu từ điển trong Python. Python hỗ trợ JSON và nó có một thư viện sẵn có dưới dạng JSON.

Thư viện JSON trong Python

Các mô-đun bên ngoài 'marshal' và 'pickle' của Python duy trì một phiên bản của thư viện JSON. Để thực hiện các thao tác liên quan đến JSON như mã hóa và giải mã trong Python, trước tiên bạn cần nạp thư viện JSON trong tệp .py của bạn,'marshal''pickle' của Python duy trì một phiên bản của thư viện JSON. Để thực hiện các thao tác liên quan đến JSON như mã hóa và giải mã trong Python, trước tiên bạn cần nạp thư viện JSON trong tệp .py của bạn,

import json

Các phương thức sau đây có sẵn trong mô-đun JSON

  Phương thức

Miêu tả

  dumps()

Mã hóa thành các đối tượng JSON

  dump()

Mã hóa chuỗi được ghi trong tệp

  loads()

Giải mã chuỗi JSON

  load()

Giải mã trong khi đọc tệp JSON


Trong bài này, bạn sẽ tìm hiểu về:

  • JSON là gì?

  • Thư viện JSON trong Python

  • Python sang JSON (Mã hóa)

  • JSON sang Python (Giải mã)

    • Giải mã tệp JSON hoặc phân tích tệp JSON trong Python

    • Mã hóa tối giản trong Python

    • Định dạng mã JSON (giúp in ra đẹp hơn)

  • Mã hóa đối tượng phức trong Python

  • Giải mã đối tượng JSON phức tạp trong Python

  • Tổng quan về lớp tuần tự hóa (serialization) JSON

  • Tổng quan về lớp giải mã (deserialization) JSON

    • Giải mã dữ liệu JSON từ URL: Ví dụ thực tế.

  • Các ngoại lệ liên quan đến thư viện JSON trong Python

  • Số vô hạn và số NaN trong Python

  • Khóa lặp lại trong Chuỗi JSON

  • CLI (Giao diện dòng lệnh) với JSON trong Python

  • Ưu điểm của JSON trong Python

  • Hạn chế trong việc triển khai JSON trong Python

  • Mã cheat

Python sang JSON (Mã hóa)

JSON sang Python (Giải mã)

Giải mã tệp JSON hoặc phân tích tệp JSON trong Python

Mã hóa tối giản trong Python

Định dạng mã JSON (giúp in ra đẹp hơn)

Mã hóa đối tượng phức trong Python

Giải mã đối tượng JSON phức tạp trong Python

Tổng quan về lớp tuần tự hóa (serialization) JSON

Tổng quan về lớp giải mã (deserialization) JSON

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế.

Các ngoại lệ liên quan đến thư viện JSON trong Python

Số vô hạn và số NaN trong Python

Khóa lặp lại trong Chuỗi JSON

CLI (Giao diện dòng lệnh) với JSON trong Python

Ưu điểm của JSON trong Python

Hạn chế trong việc triển khai JSON trong Python

Mã cheat

Theo mặc định, thư viện Python thực hiện dịch các đối tượng Python thành các đối tượng JSON

  Python

JSON

  Từ điển (dict)dumps()

Đối tượngdumps() chuyển đổi đối tượng từ điển của python thành định dạng dữ liệu dạng chuỗi JSON.

  Danh sách (list)

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)

Mảng

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

  unicodedump()

# here we create new data_file.json file with write mode using file i/o operation 
with open('json_file.json', "w") as file_write:
# write json data into file
json.dump(person_data, file_write)

Mảng

  unicode

Hướng dẫn python json storage - bộ lưu trữ python json

JSON sang Python (Giải mã)

Giải mã tệp JSON hoặc phân tích tệp JSON trong Pythonloads() & load() của thư viện JSON trong Python. Bảng dịch dưới đây đưa ra các ví dụ về cách chuyển đổi đối tượng JSON sang đối tượng trong Python, điều này rất hữu ích trong trường hợp bạn muốn giải mã chuỗi JSON sang Python.

Mã hóa tối giản trong Python

Định dạng mã JSON (giúp in ra đẹp hơn)

Mã hóa đối tượng phức trong Python

Giải mã đối tượng JSON phức tạp trong Python

Tổng quan về lớp tuần tự hóa (serialization) JSON

Tổng quan về lớp giải mã (deserialization) JSON

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế.

Các ngoại lệ liên quan đến thư viện JSON trong Python

Số vô hạn và số NaN trong Python

Khóa lặp lại trong Chuỗi JSON

CLI (Giao diện dòng lệnh) với JSON trong Python

float

Ưu điểm của JSON trong Python

Hạn chế trong việc triển khai JSON trong Python

Mã cheat

Theo mặc định, thư viện Python thực hiện dịch các đối tượng Python thành các đối tượng JSON

  Python

JSON

  Từ điển (dict) json.loads() ,

import json  # json library imported
# json data string
person_data = '{  "person":  { "name":  "Kenn",  "sex":  "male",  "age":  28}}'
# Decoding or converting JSON format in dictionary using loads()
dict_obj = json.loads(person_data)
print(dict_obj)
# check type of dict_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......",  dict_obj.get('person'))

Mảng

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj 
Person...... {'name': 'John', 'sex': 'male'}


  unicode

Hướng dẫn python json storage - bộ lưu trữ python json

Chuỗi: Giải mã tệp JSON là thao tác liên quan tới nhập/xuất tệp. Tệp JSON phải tồn tại trên hệ thống ở vị trí mà bạn khai báo trong chương trình.

  Số-int,long

import json
#File I/O Open function for read data from JSON File
with open('X:/json_file.json') as file_object:
        # store file data in object
        data = json.load(file_object)
print(data)

số - số nguyên

Mảng

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Hướng dẫn python json storage - bộ lưu trữ python json

Mã hóa tối giản trong Python

Định dạng mã JSON (giúp in ra đẹp hơn)

Mã hóa đối tượng phức trong Python

import json
# Create a List that contains dictionary
lst = ['a', 'b', 'c',{'4': 5, '6': 7}]
# separator used for compact representation of JSON.
# Use of ',' to identify list items
# Use of ':' to identify key and value in dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)

Mảng

import json
0

  unicode

  • Chuỗi

  •   Số-int,long

import json
1

Mảng

import json
2

Hướng dẫn python json storage - bộ lưu trữ python json

  unicode

Hướng dẫn python json storage - bộ lưu trữ python json

Chuỗi

  Số-int,long sort_keys trong đối số của hàm dumps () sẽ sắp xếp khóa trong JSON theo thứ tự tăng dần. Đối số sort_keys là một thuộc tính kiểu Boolean. Quá trình sắp xếp được thực hiện nếu giá trị được đặt là True, và ngược lại.

Mã hóa đối tượng phức trong Python

Giải mã đối tượng JSON phức tạp trong Python

Mảng

import json
4

  unicode

Mã hóa đối tượng phức trong Pythonn

Giải mã đối tượng JSON phức tạp trong Python

  • Tổng quan về lớp tuần tự hóa (serialization) JSON

  • Tổng quan về lớp giải mã (deserialization) JSON

Hướng dẫn python json storage - bộ lưu trữ python json

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế.

Các ngoại lệ liên quan đến thư viện JSON trong Python

Số vô hạn và số NaN trong Python

import json
5

Đầu ra:

import json
6

Giải mã đối tượng JSON phức trong Python

Để giải mã đối tượng phức trong JSON, hãy sử dụng tham số object_hook để kiểm tra chuỗi JSON có chứa đối tượng phức hay không. Ví dụ,

import json
7

Đầu ra:  
 

import json
8

Tổng quan về lớp tuần tự hóa (Serialization) JSON

Lớp JSONEncoder được sử dụng để tuần tự hóa bất kỳ đối tượng Python nào trong khi thực hiện mã hóa. Nó chứa ba phương thức mã hóa khác nhau

  • default(o) - Được triển khai trong lớp con và trả về đối tượng tuần tự cho đối tượng o. - Được triển khai trong lớp con và trả về đối tượng tuần tự cho đối tượng o.

  • encode(o) - Giống như phương thức json.dumps (), nó trả về chuỗi JSON của cấu trúc dữ liệu Python. - Giống như phương thức json.dumps (), nó trả về chuỗi JSON của cấu trúc dữ liệu Python.

  • iterencode(o) – Biểu diễn từng chuỗi một và mã hóa đối tượng o. – Biểu diễn từng chuỗi một và mã hóa đối tượng o.

Với sự trợ giúp của phương thức encode() thuộc lớp JSONEncoder, chúng ta cũng có thể mã hóa bất kỳ đối tượng Python nào.

import json
9

Đầu ra:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
0

Tổng quan về lớp giải mã (deserialization) JSON

Lớp JSONDecoder được sử dụng để giải mã tuần tự hóa bất kỳ đối tượng Python nào trong khi thực hiện giải mã. Nó chứa ba phương pháp giải mã khác nhau

  • default (o) - Được triển khai trong lớp con và trả về đối tượng giải mã.- Được triển khai trong lớp con và trả về đối tượng giải mã.

  • decode (o) - Giống như phương thức json.loads(), nó trả về cấu trúc dữ liệu Python của chuỗi hoặc dữ liệu JSON. - Giống như phương thức json.loads(), nó trả về cấu trúc dữ liệu Python của chuỗi hoặc dữ liệu JSON.

  • raw_decode (o) – Biểu diễn từng từ điển Python và giải mã đối tượng o. – Biểu diễn từng từ điển Python và giải mã đối tượng o.

Với sự trợ giúp của phương thức decode () của lớp JSONDecoder, chúng ta cũng có thể giải mã chuỗi JSON.

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
1

Đầu ra:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
2

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế

Chúng ta sẽ lấy dữ liệu của CityBike NYC (Hệ thống chia sẻ xe đạp) từ URL sau ( https://feeds.citibikenyc.com/stations/stations.json ) và chuyển đổi sang định dạng từ điển.

Ví dụ

LƯU Ý: - Đảm bảo thư viện yêu cầu đã được cài đặt trong Python của bạn, nếu không hãy mở cửa sổ dòng lệnh hoặc CMD và gõ

(Đối với Python 3 trở lên) pip3 install requestspip3 install requests

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
3

Đầu ra:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
4

Các ngoại lệ liên quan đến thư viện JSON trong Python

  • Lớp json.JSONDecoderError xử lý ngoại lệ liên quan đến hoạt động giải mã, và nó là một lớp con của ValueError.json.JSONDecoderError xử lý ngoại lệ liên quan đến hoạt động giải mã, và nó là một lớp con của ValueError.

  • Ngoại lệ - json.JSONDecoderError (msg, doc)json.JSONDecoderError (msg, doc)

  • Các tham số của ngoại lệ là,

    • msg - Thông báo lỗi chưa được định dạng

    • doc - Tài liệu JSON được phân tích cú pháp

    • pos - chỉ số bắt đầu của doc khi nó thất bại

    • lineno – số dòng thể hiện tương ứng với pos

    • colon – số cột thể hiện tương ứng với pos

Ví dụ,

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
5

Hướng dẫn python json storage - bộ lưu trữ python json

Số vô hạn và số NaN trong Python

Định dạng trao đổi dữ liệu JSON (RFC - Yêu cầu nhận xét) không cho phép giá trị vô hạn hoặc giá trị NaN nhưng thư viện JSON của Python không có hạn chế nào đối với việc này. Nếu JSON nhận được kiểu dữ liệu vô hạn và NanN thì nó sẽ chuyển đổi sang dạng chữ.

Ví dụ,

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
6

Đầu ra:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
7

Số vô hạn và số NaN trong Python

Định dạng trao đổi dữ liệu JSON (RFC - Yêu cầu nhận xét) không cho phép giá trị vô hạn hoặc giá trị NaN nhưng thư viện JSON của Python không có hạn chế nào đối với việc này. Nếu JSON nhận được kiểu dữ liệu vô hạn và NanN thì nó sẽ chuyển đổi sang dạng chữ.

Ví dụ,

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
8

Đầu ra:

import json

x = {
  "name": "Ken",
  "age": 45,
  "married": True,
  "children": ("Alice","Bob"),
  "pets": ['Dog'],
  "cars": [
    {"model": "Audi A1", "mpg": 15.1},
    {"model": "Zeep Compass", "mpg": 18.1}
  ]
}
# sorting result in asscending order by keys:
sorted_string = json.dumps(x, indent=4, sort_keys=True)
print(sorted_string)
9

Số vô hạn và số NaN trong Python

Định dạng trao đổi dữ liệu JSON (RFC - Yêu cầu nhận xét) không cho phép giá trị vô hạn hoặc giá trị NaN nhưng thư viện JSON của Python không có hạn chế nào đối với việc này. Nếu JSON nhận được kiểu dữ liệu vô hạn và NanN thì nó sẽ chuyển đổi sang dạng chữ.cung cấp giao diện dòng lệnh để xác thực cú pháp trong JSON. Hãy xem ví dụ về CLI

Hướng dẫn python json storage - bộ lưu trữ python json

{"person": {"name": "Kenn", "sex": "male", "age": 28}})
0

Đầu ra:  
 

{"person": {"name": "Kenn", "sex": "male", "age": 28}})
1

Tổng quan về lớp tuần tự hóa (Serialization) JSON

  • Lớp JSONEncoder được sử dụng để tuần tự hóa bất kỳ đối tượng Python nào trong khi thực hiện mã hóa. Nó chứa ba phương thức mã hóa khác nhau

  • default(o) - Được triển khai trong lớp con và trả về đối tượng tuần tự cho đối tượng o.

  • encode(o) - Giống như phương thức json.dumps (), nó trả về chuỗi JSON của cấu trúc dữ liệu Python.

  • iterencode(o) – Biểu diễn từng chuỗi một và mã hóa đối tượng o.

Với sự trợ giúp của phương thức encode() thuộc lớp JSONEncoder, chúng ta cũng có thể mã hóa bất kỳ đối tượng Python nào.

  • Tổng quan về lớp giải mã (deserialization) JSON

  • Lớp JSONDecoder được sử dụng để giải mã tuần tự hóa bất kỳ đối tượng Python nào trong khi thực hiện giải mã. Nó chứa ba phương pháp giải mã khác nhau

default (o) - Được triển khai trong lớp con và trả về đối tượng giải mã.

decode (o) - Giống như phương thức json.loads(), nó trả về cấu trúc dữ liệu Python của chuỗi hoặc dữ liệu JSON.

raw_decode (o) – Biểu diễn từng từ điển Python và giải mã đối tượng o.

Với sự trợ giúp của phương thức decode () của lớp JSONDecoder, chúng ta cũng có thể giải mã chuỗi JSON.

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế

Chúng ta sẽ lấy dữ liệu của CityBike NYC (Hệ thống chia sẻ xe đạp) từ URL sau ( https://feeds.citibikenyc.com/stations/stations.json ) và chuyển đổi sang định dạng từ điển.

Ví dụ

LƯU Ý: - Đảm bảo thư viện yêu cầu đã được cài đặt trong Python của bạn, nếu không hãy mở cửa sổ dòng lệnh hoặc CMD và gõ

(Đối với Python 3 trở lên) pip3 install requests

Các ngoại lệ liên quan đến thư viện JSON trong Python

Lớp json.JSONDecoderError xử lý ngoại lệ liên quan đến hoạt động giải mã, và nó là một lớp con của ValueError.

Ngoại lệ - json.JSONDecoderError (msg, doc)

Các tham số của ngoại lệ là,

msg - Thông báo lỗi chưa được định dạng

doc - Tài liệu JSON được phân tích cú pháp

pos - chỉ số bắt đầu của doc khi nó thất bại

lineno – số dòng thể hiện tương ứng với pos

colon – số cột thể hiện tương ứng với pos

Ví dụ,

Số vô hạn và số NaN trong Python

Định dạng trao đổi dữ liệu JSON (RFC - Yêu cầu nhận xét) không cho phép giá trị vô hạn hoặc giá trị NaN nhưng thư viện JSON của Python không có hạn chế nào đối với việc này. Nếu JSON nhận được kiểu dữ liệu vô hạn và NanN thì nó sẽ chuyển đổi sang dạng chữ.