Python JSON: Mã hóa (kết xuất), Giải mã (tải) & Đọc tệp JSON
JSON là gì Python?
JSON in Python là một định dạng tiêu chuẩn lấy cảm hứng từ JavaScript để trao đổi dữ liệu và truyền dữ liệu dưới dạng văn bản qua mạng. Nói chung, JSON ở dạng chuỗi hoặc văn bản. Nó có thể được sử dụng bởi API và cơ sở dữ liệu và nó biểu diễn các đối tượng dưới dạng cặp tên/giá trị. JSON là viết tắt của JavaKý hiệu đối tượng kịch bản.
Python Cú pháp JSON:
JSON được viết dưới dạng cặp khóa và giá trị.
{ "Key": "Value", "Key": "Value", }
JSON rất giống với Python từ điển. Python hỗ trợ JSON và nó có thư viện sẵn có dưới dạng JSON.
Thư viện JSON trong Python
'nguyên soái'Và'dưa chua' mô-đun bên ngoài của Python duy trì một phiên bản của JSON Python thư viện. Làm việc với JSON trong Python để thực hiện các hoạt động liên quan đến JSON như mã hóa và giải mã, trước tiên bạn cần nhập khẩu thư viện JSON và cho điều đó trong .py tập tin,
import json
Các phương pháp sau đây có sẵn trong JSON Python mô-đun
Phương pháp | Mô tả Chi tiết |
---|---|
bãi rác() | mã hóa thành các đối tượng JSON |
bãi rác() | ghi chuỗi được mã hóa vào tập tin |
tải() | Giải mã chuỗi JSON |
tải () | Giải mã trong khi đọc tệp JSON |
Python sang JSON (Mã hóa)
JSON Thư viện của Python thực hiện bản dịch sau đây Python các đối tượng thành các đối tượng JSON theo mặc định
Python | JSON |
---|---|
mệnh lệnh | Đối tượng |
Mảng | |
unicode | Chuỗi |
số - int, dài | số – int |
phao | số - thực |
Thật | Thật |
Sai | Sai |
Không áp dụng | Null |
Chuyển đổi Python dữ liệu sang JSON được gọi là hoạt động Mã hóa. Mã hóa được thực hiện với sự trợ giúp của phương pháp thư viện JSON – bãi rác()
kết xuất JSON() trong Python
json.dumps () in Python là một phương pháp chuyển đổi các đối tượng từ điển của Python thành định dạng dữ liệu chuỗi JSON. Điều này hữu ích khi các đối tượng được yêu cầu ở định dạng chuỗi cho các hoạt động như phân tích cú pháp, in, v.v.
Bây giờ hãy thực hiện ví dụ mã hóa json.dumps đầu tiên của chúng tôi với Python:
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)
Đầu ra:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Hãy xem một ví dụ về Python ghi JSON vào tệp để tạo tệp JSON của từ điển bằng chức năng tương tự bãi rác()
# 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)
Đầu ra:
Không có gì để hiển thị…Trong hệ thống của bạn, json_file.json được tạo. Bạn có thể kiểm tra tệp đó như trong phần bên dưới, ghi JSON vào tệp Python thí dụ.
JSON sang Python (Giải mã)
Giải mã chuỗi JSON được thực hiện với sự trợ giúp của phương thức sẵn có json.loads () & json.load() của thư viện JSON trong Python. Bảng dịch ở đây hiển thị ví dụ về các đối tượng JSON Python đối tượng rất hữu ích để thực hiện giải mã trong Python của chuỗi JSON.
JSON | Python |
---|---|
Đối tượng | mệnh lệnh |
Mảng | |
Chuỗi | unicode |
số – int | số - int, dài |
số - thực | phao |
Thật | Thật |
Sai | Sai |
Null | Không áp dụng |
Hãy xem một phân tích cơ bản JSON Python ví dụ về giải mã với sự trợ giúp của json.loads chức năng,
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'))
Đầu ra:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Giải mã tệp JSON hoặc phân tích tệp JSON trong Python
Bây giờ, chúng ta sẽ tìm hiểu cách đọc tệp JSON trong Python với Python phân tích ví dụ JSON:
LƯU Ý: Giải mã tệp JSON là thao tác liên quan đến Đầu vào/Đầu ra (I/O) của Tệp. Tệp JSON phải tồn tại trên hệ thống của bạn tại vị trí được chỉ định mà bạn đề cập trong chương trình của mình.
Python đọc tệp JSON Ví dụ:
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)
Dữ liệu ở đây là một đối tượng từ điển của Python như được hiển thị trong tệp JSON đã đọc ở trên Python thí dụ.
Đầu ra:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Mã hóa nhỏ gọn trong Python
Khi cần giảm kích thước tệp JSON, bạn có thể sử dụng mã hóa nhỏ gọn trong Python.
Thí dụ,
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)
Đầu ra:
'["a", "b", "c", {"4": 5, "6": 7}]' ** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj **
Định dạng mã JSON (Bản in đẹp)
- Mục đích là viết mã có định dạng tốt để con người có thể hiểu được. Với sự hỗ trợ của việc in ấn đẹp mắt, bất kỳ ai cũng có thể dễ dàng hiểu được mã.
Ví dụ:
import json dic = { 'a': 4, 'b': 5 } ''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. ''' formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) print(formatted_obj)
Đầu ra:
{ "a" : 4, "b" : 5 }
Để hiểu rõ hơn về điều này, hãy thay đổi thụt lề thành 40 và quan sát kết quả đầu ra-
Đặt hàng mã JSON:
sắp xếp_keys thuộc tính trong Python Đố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 Boolean. Khi đúng thì được phép sắp xếp nếu không thì không. Hãy cùng tìm hiểu với Python chuỗi thành ví dụ sắp xếp JSON.
Thí 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)
Đầu ra:
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Như bạn có thể quan sát, độ tuổi của chìa khóa, ô tô, trẻ em, v.v. được sắp xếp theo thứ tự tăng dần.
Mã hóa đối tượng phức tạp của Python
Một đối tượng phức tạp có hai phần khác nhau là
- Phần thực
- Phần ảo
Ví dụ: 3 +2i
Trước khi thực hiện mã hóa một đối tượng phức tạp, bạn cần kiểm tra xem biến có phức tạp hay không. Bạn cần tạo một hàm kiểm tra giá trị được lưu trữ trong một biến bằng cách sử dụng một phương thức thể hiện.
Hãy tạo hàm cụ thể để kiểm tra xem đối tượng có phức tạp hay đủ điều kiện để mã hóa hay không.
import json # create function to check instance is complex or not def complex_encode(object): # check using isinstance method if isinstance(object, complex): return [object.real, object.imag] # raised error using exception handling if object is not complex raise TypeError(repr(object) + " is not JSON serialized") # perform json encoding by passing parameter complex_obj = json.dumps(4 + 5j, default=complex_encode) print(complex_obj)
Đầu ra:
'[4.0, 5.0]'
Giải mã đối tượng JSON phức tạp trong Python
Để giải mã đối tượng phức tạp 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 tạp hay không. Hãy cùng tìm hiểu với chuỗi thành JSON Python Thí dụ,
import json # function check JSON string contains complex object def is_complex(objct): if '__complex__' in objct: return complex(objct['real'], objct['img']) return objct # use of json loads method with object_hook for check object complex or not complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex) #here we not passed complex object so it's convert into dictionary simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex) print("Complex_object......",complex_object) print("Without_complex_object......",simple_object)
Đầu ra:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Tổng quan về lớp tuần tự hóa JSON JSONEncode
Lớp JSONEncode được sử dụng để tuần tự hóa bất kỳ Python đối tượng trong khi thực hiện mã hóa. Nó chứa ba phương pháp mã hóa khác nhau đó là
- mặc định(o) – Được triển khai trong lớp con và trả về đối tượng tuần tự hóa cho o vật.
- mã hóa(o) – Tương tự như kết xuất JSON Python phương thức trả về chuỗi JSON của Python cấu trúc dữ liệu.
- 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() của lớp JSONEncoding, chúng ta cũng có thể mã hóa bất kỳ Python đối tượng như hình dưới đây Python Ví dụ về bộ mã hóa JSON.
# import JSONEncoder class from json from json.encoder import JSONEncoder colour_dict = { "colour": ["red", "yellow", "green" ]} # directly called encode method of JSON JSONEncoder().encode(colour_dict)
Đầu ra:
'{"colour": ["red", "yellow", "green"]}'
Tổng quan về lớp giải tuần tự hóa JSON JSONDecode
Lớp JSONDecoding được sử dụng để giải tuần tự hóa bất kỳ Python đối tượng trong khi thực hiện giải mã. Nó chứa ba phương pháp giải mã khác nhau đó là
- mặc định(o) – Được thực hiện trong lớp con và trả về đối tượng đã được deserialized o vật.
- giải mã(o) – Tương tự như trả về phương thức json.loads() Python cấu trúc dữ liệu của chuỗi JSON hoặc dữ liệu.
- raw_decode(o) - Đại diện Python từ điển từng cái một và giải mã đối tượng o.
Với sự trợ giúp của phương thức giải mã () của lớp JSONDecoding, chúng ta cũng có thể giải mã chuỗi JSON như dưới đây Python Ví dụ về bộ giải mã JSON.
import json # import JSONDecoder class from json from json.decoder import JSONDecoder colour_string = '{ "colour": ["red", "yellow"]}' # directly called decode method of JSON JSONDecoder().decode(colour_string)
Đầu ra:
{'colour': ['red', 'yellow']}
Giải mã dữ liệu JSON từ URL: Ví dụ thực tế
Chúng tôi sẽ tìm nạp dữ liệu của CityBike NYC (Hệ thống chia sẻ xe đạp) từ URL được chỉ định(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) và chuyển đổi sang định dạng từ điển.
Python tải JSON từ tệp Ví dụ:
LƯU Ý: - Đảm bảo thư viện yêu cầu đã được cài đặt trong Python, Nếu không thì mở Terminal hoặc CMD và gõ
- (Đối với Python 3 trở lên) yêu cầu cài đặt pip3
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json") # check type of json_response object print(type(json_response.text)) # load data in loads() function of json library bike_dict = json.loads(json_response.text) #check type of news_dict print(type(bike_dict)) # now get stationBeanList key data from dict print(bike_dict['stationBeanList'][0])
Đầu ra:
<class 'str'> <class 'dict'> { 'id': 487, 'stationName': 'E 20 St & FDR Drive', 'availableDocks': 24, 'totalDocks': 34, 'latitude': 40.73314259, 'longitude': -73.97573881, 'statusValue': 'In Service', 'statusKey': 1, 'availableBikes': 9, 'stAddress1': 'E 20 St & FDR Drive', 'stAddress2': '', 'city': '', 'postalCode': '', 'location': '', 'altitude': '', 'testStation': False, 'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': '' }
Các ngoại lệ liên quan đến Thư viện JSON trong Python:
- Lớp json.JSONDecodingLỗi 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 Giá trịError.
- Ngoại lệ - json.JSONDecodingError(tin nhắn, tài liệu)
- 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 - bắt đầu lập chỉ mục của tài liệu khi nó bị lỗi
- lineno – dòng không hiển thị tương ứng với pos
- dấu hai chấm – cột không tương ứng với pos
Python tải JSON từ tệp Ví dụ:
import json #File I/O Open function for read data from JSON File data = {} #Define Empty Dictionary Object try: with open('json_file_name.json') as file_object: data = json.load(file_object) except ValueError: print("Bad JSON file format, Change JSON File")
Vô hạn và NaN Numbers in 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 Nan nhưng không có hạn chế về Python- Thư viện JSON để thực hiện thao tác liên quan đến giá trị vô hạn và Nan. Nếu JSON có kiểu dữ liệu INFINITE và Nan thì nó sẽ được chuyển đổi thành dạng số nguyên.
Thí dụ,
import json # pass float Infinite value infinite_json = json.dumps(float('inf')) # check infinite json type print(infinite_json) print(type(infinite_json)) json_nan = json.dumps(float('nan')) print(json_nan) # pass json_string as Infinity infinite = json.loads('Infinity') print(infinite) # check type of Infinity print(type(infinite))
Đầu ra:
Infinity <class 'str'> NaN inf <class 'float'>
Khóa lặp lại trong chuỗi JSON
RFC chỉ định tên khóa phải là duy nhất trong đối tượng JSON nhưng không bắt buộc. Python Thư viện JSON không đưa ra ngoại lệ đối với các đối tượng lặp lại trong JSON. Nó bỏ qua tất cả các cặp khóa-giá trị lặp lại và chỉ xem xét cặp khóa-giá trị cuối cùng trong số đó.
- Thí dụ,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Đầu ra:
{'a': 3}
CLI (Giao diện dòng lệnh) với JSON trong Python
json.tool cung cấp giao diện dòng lệnh để xác thực cú pháp in đẹp JSON. Hãy xem một ví dụ về CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Đầu ra:
{ "name": " Kings Authur " }
Ưu điểm của JSON trong Python
- Dễ dàng di chuyển trở lại giữa vùng chứa và giá trị (JSON sang Python và Python sang JSON)
- Đối tượng JSON có thể đọc được (bản in đẹp) của con người
- Được sử dụng rộng rãi trong việc xử lý dữ liệu.
- Không có cấu trúc dữ liệu giống nhau trong một tệp.
Hạn chế triển khai JSON trong Python
- Trong trình giải tuần tự của phạm vi JSON và dự đoán một số
- Độ dài tối đa của chuỗi JSON và các mảng JSON cũng như mức lồng nhau của đối tượng.
Python Bảng cheat JSON
Python Hàm JSON | Mô tả Chi tiết |
---|---|
json.dumps(person_data) | Tạo đối tượng JSON |
json.dump(person_data, file_write) | Tạo tệp JSON bằng tệp I/O của Python |
compact_obj = json.dumps(dữ liệu, dấu phân cách=(',',':')) | Thu gọn đối tượng JSON bằng cách xóa ký tự khoảng trắng khỏi Đối tượng JSON bằng dấu phân cách |
formatted_obj = json.dumps(dic, thụt lề=4, dấu phân cách=(',', ': ')) | Định dạng mã JSON bằng cách sử dụng thụt lề |
Sort_string = json.dumps(x, indent=4, Sort_keys=True) | Sắp xếp khóa đối tượng JSON theo thứ tự bảng chữ cái |
complex_obj = json.dumps(4 + 5j, mặc định=complex_encode) | Python Mã hóa đối tượng phức tạp trong JSON |
JSONEncode().encode(colour_dict) | Sử dụng lớp JSONEncoding để tuần tự hóa |
json.loads(data_string) | Giải mã chuỗi JSON trong Python từ điển sử dụng hàm json.loads() |
json.loads('{“__complex__”: đúng, “thực”: 4, “img”: 5}', object_hook = is_complex) | Giải mã đối tượng JSON phức tạp thành Python |
JSONDecoding().decode(colour_string) | Sử dụng Giải mã JSON để Python với quá trình khử lưu huỳnh |