Bạn ở đây vì khi bạn cố gắng mã hóa/xếp thứ tự mảng NumPy thành định dạng JSON, bạn đã nhận được TypeError.
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]8. Trong bài viết này, tôi sẽ chỉ cho bạn cách làm cho mảng NumPy có thể tuần tự hóa JSON để bạn có thể chuyển đổi bất kỳ mảng NumPy nào thành dữ liệu có định dạng JSON
Như bạn đã biết Mô-đun json tích hợp của Python chỉ có thể xử lý các loại nguyên thủy có JSON trực tiếp tương đương [e. g. , từ điển, danh sách, chuỗi, Số, Không có, v.v. ]. Để tuần tự hóa mảng nhiều chiều thành JSON, Chúng ta cần viết Bộ mã hóa JSON tùy chỉnh
Đọc thêm
- Giải Bài tập JSON của Python để thực hành các kỹ năng JSON của Python
Bộ mã hóa JSON tùy chỉnh để tuần tự hóa NumPy ndarray
Mô-đun json của Python có lớp
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]9, chúng ta có thể mở rộng nó để có thêm đầu ra tùy chỉnh. tôi. e. , bạn sẽ phải phân lớp JSONEncoder để bạn có thể triển khai tuần tự hóa JSON NumPy tùy chỉnh
Khi chúng tôi mở rộng lớp JSONEncoder, chúng tôi sẽ mở rộng phạm vi mã hóa JSON của nó bằng cách ghi đè phương thức
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]0 sẽ được sử dụng khi chúng tôi thực thi
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]1
Sử dụng
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]2
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]3 của json. bãi [] và json. dumps[] để gọi Bộ mã hóa JSON tùy chỉnh của chúng tôi, sẽ chuyển đổi mảng NumPy thành dữ liệu có định dạng JSON
Thí dụ.
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]4
Để tuần tự hóa mảng Numpy thành JSON, chúng ta cần chuyển đổi nó thành cấu trúc danh sách bằng cách sử dụng hàm
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]5. Hãy xem bản demo
Mã hóa và giải mã mảng NumPy đến và từ JSON
Trong ví dụ này, chúng tôi cố gắng tuần tự hóa Mảng NumPy thành Chuỗi JSON
import json
from json import JSONEncoder
import numpy
class NumpyArrayEncoder[JSONEncoder]:
def default[self, obj]:
if isinstance[obj, numpy.ndarray]:
return obj.tolist[]
return JSONEncoder.default[self, obj]
numpyArrayOne = numpy.array[[[11, 22, 33], [44, 55, 66], [77, 88, 99]]]
# Serialization
numpyData = {"array": numpyArrayOne}
encodedNumpyData = json.dumps[numpyData, cls=NumpyArrayEncoder] # use dump[] to write array into file
print["Printing JSON serialized NumPy array"]
print[encodedNumpyData]
# Deserialization
print["Decode JSON serialized NumPy array"]
decodedArrays = json.loads[encodedNumpyData]
finalNumpyArray = numpy.asarray[decodedArrays["array"]]
print["NumPy Array"]
print[finalNumpyArray]
đầu ra
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]
Ghi chú. Chúng tôi đã sử dụng
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]6 để chuyển đổi dữ liệu thành mảng NumPy
Mã hóa mảng NumPy thành JSON và viết nó vào một tệp
Trong hầu hết các trường hợp, chúng tôi cần lưu trữ mảng NumPy được tuần tự hóa JSON vào một tệp để chúng tôi có thể sử dụng nó trong các hệ thống khác nhau
Trong ví dụ này, chúng tôi sẽ làm như sau
- Chuyển đổi hai mảng NumPy thành JSON và ghi nó vào tệp JSON
- Đọc tệp JSON chứa mảng NumPy được tuần tự hóa JSON và chuyển đổi nó thành Mảng NumPy thực tế
import numpy
from json import JSONEncoder
import json
class NumpyArrayEncoder[JSONEncoder]:
def default[self, obj]:
if isinstance[obj, numpy.ndarray]:
return obj.tolist[]
return JSONEncoder.default[self, obj]
numpyArrayOne = numpy.array[[[11 ,22, 33], [44, 55, 66], [77, 88, 99]]]
numpyArrayTwo = numpy.array[[[51, 61, 91], [121 ,118, 127]]]
# Serialization
numpyData = {"arrayOne": numpyArrayOne, "arrayTwo": numpyArrayTwo}
print["serialize NumPy array into JSON and write into a file"]
with open["numpyData.json", "w"] as write_file:
json.dump[numpyData, write_file, cls=NumpyArrayEncoder]
print["Done writing serialized NumPy array into file"]
# Deserialization
print["Started Reading JSON file"]
with open["numpyData.json", "r"] as read_file:
print["Converting JSON encoded data into Numpy array"]
decodedArray = json.load[read_file]
finalNumpyArrayOne = numpy.asarray[decodedArray["arrayOne"]]
print["NumPy Array One"]
print[finalNumpyArrayOne]
finalNumpyArrayTwo = numpy.asarray[decodedArray["arrayTwo"]]
print["NumPy Array Two"]
print[finalNumpyArrayTwo]
đầu ra
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]0
Mã hóa chính xác tất cả các loại NumPy thành JSON
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]1
đầu ra
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]2
Sử dụng phương thức panads to_json để tuần tự hóa NumPy ndarray thành JSON
Nếu bạn sử dụng gấu trúc để thao tác dữ liệu, bạn có thể sử dụng chức năng
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]7 trên Sê-ri.
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]8 chuyển đổi đối tượng thành chuỗi JSON. chúng ta có thể truyền mảng NumPy cho nó để lấy biểu diễn JSON
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]5
đầu ra
Printing JSON serialized NumPy array {"array": [[11, 22, 33], [44, 55, 66], [77, 88, 99]]} Decode JSON serialized NumPy array NumPy Array [[11 22 33] [44 55 66] [77 88 99]]6
Vậy bạn nghĩ như thế nào?
Tôi muốn nghe từ bạn. Bạn nghĩ gì về bài viết này? . Dù bằng cách nào, hãy cho tôi biết bằng cách để lại nhận xét bên dưới
Ngoài ra, hãy thử giải Bài tập JSON của Python để hiểu rõ hơn về Làm việc với Dữ liệu JSON trong Python