Đây chỉ là một gợi ý bổ sung về cách sử dụng json.dumps
[đây không phải là câu trả lời cho vấn đề của câu hỏi, mà là một mẹo dành cho những người phải kết xuất các loại dữ liệu khó hiểu]
Nếu có các loại dữ liệu NumPy trong từ điển, thì json.dumps[]
cần một tham số bổ sung, các khoản tín dụng sẽ chuyển đến TypeError. Đối tượng thuộc loại 'ndarray' không thể tuần tự hóa JSON và nó cũng sẽ sửa các lỗi như TypeError: Object of type int64 is not JSON serializable
, v.v.
class NumpyEncoder[json.JSONEncoder]:
""" Special json encoder for np types """
def default[self, obj]:
if isinstance[obj, [np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64]]:
return int[obj]
elif isinstance[obj, [np.float_, np.float16, np.float32,
np.float64]]:
return float[obj]
elif isinstance[obj, [np.ndarray,]]:
return obj.tolist[]
return json.JSONEncoder.default[self, obj]
Và sau đó chạy
import json
#print[json.dumps[my_data[:2], indent=4, cls=NumpyEncoder]]]
with open[my_dir+'/my_filename.json', 'w'] as f:
json.dumps[my_data, indent=4, cls=NumpyEncoder]]]
Bạn cũng có thể muốn trả về một chuỗi thay vì một danh sách trong trường hợp np. array[] vì các mảng được in dưới dạng danh sách trải rộng trên các hàng, điều này sẽ làm tăng đầu ra nếu bạn có nhiều hoặc nhiều mảng. báo trước. việc truy cập các mục từ từ điển bị đổ sau đó sẽ khó khăn hơn để lấy lại chúng dưới dạng mảng ban đầu. Tuy nhiên, nếu bạn không phiền khi chỉ có một chuỗi của một mảng, điều này làm cho từ điển dễ đọc hơn. Sau đó trao đổi
Trong bài viết này tôi muốn tập trung vào một loại định dạng được gọi là JSON. Tôi khá chắc chắn rằng bạn đã từng nghe nói về JSON trước đây. Nhưng nếu không, hãy để tôi mô tả ngắn gọn về JSON cho bạn
JSON là Ký hiệu đối tượng JavaScript và được lấy cảm hứng từ tập hợp con của ngôn ngữ lập trình JS xử lý cú pháp nghĩa đen của đối tượng. Tuy nhiên, trong khi đó ngôn ngữ bất khả tri có nghĩa là không thành vấn đề nếu bạn không viết JavaScript. Bạn có thể xử lý dữ liệu được định dạng JSON bằng bất kỳ ngôn ngữ lập trình nào khác
Nhưng tại sao JSON lại quan trọng với bạn, bạn quan tâm đến khoa học dữ liệu phải không? . Sau đó nhiều hơn về điều đó. [Tiết diện. “Real World?”] Vì vậy, nếu bạn đang trên hành trình giống như tôi và bạn muốn tìm hiểu một công cụ hữu ích khác. Bài viết này là dành cho bạn. Ngay cả khi bạn đang ở một giai đoạn khác trong sự nghiệp của mình, tôi tin chắc rằng vì tiêu đề đã thu hút sự chú ý của bạn nên bạn muốn làm mới kiến thức của mình về định dạng JSON để giải quyết vấn đề hiện tại hoặc bạn tìm kiếm một kỹ năng mới trong kho vũ khí trăn khoa học dữ liệu của mình
JSON trông như thế nàoĐược rồi, JSON trông như thế nào và nó hỗ trợ những gì?
Đây là tập tin example.json
Như bạn có thể thấy, nó hỗ trợ các kiểu nguyên thủy như chuỗi, số nguyên cũng như danh sách và đối tượng lồng nhau. Và có vẻ như Python. Nhưng hãy chú ý, tôi đã cung cấp bảng chuyển đổi đọc và chuyển đổi ghi để bạn được thông báo về sự khác biệt giữa JSON và python
Tại sao lưu trữ dữ liệu trong Python bằng mô-đun JSON?- Định dạng JSON cho phép các lập trình viên kết xuất các cấu trúc dữ liệu đơn giản vào một tệp và tải lại chúng vào các chương trình khi cần
- Dữ liệu có thể được chia sẻ giữa các chương trình của ngôn ngữ khác bằng các tệp được định dạng JSON
Vì ưu điểm của định dạng JSON đến từ việc lưu trữ và lấy dữ liệu nên bài viết này chia sẻ với bạn các hàm và ví dụ để lần sau khi bạn muốn xử lý dữ liệu, các kỹ năng về định dạng JSON sẽ sẵn sàng cho bạn sử dụng
Nếu bạn muốn có thêm các bài viết về chủ đề này, điều cần thiết là bạn phải biết một số từ vựng. Việc mã hóa dữ liệu thành JSON được gọi là tuần tự hóa [dữ liệu được lưu trữ dưới dạng chuỗi byte]. Quá trình ngược lại để lấy dữ liệu từ tệp có định dạng JSON được gọi là giải tuần tự hóa. Nhưng tôi nghĩ không cần thiết phải biết điều đó đối với các nhiệm vụ cơ bản. Vì vậy, bây giờ chúng ta hãy bắt đầu thực hiện một số kinh nghiệm
Dữ liệu thành json — Tuần tự hóaHãy tưởng tượng bạn xây dựng một chương trình tạo dữ liệu nhưng bạn cũng muốn chia sẻ dữ liệu và thông tin cơ bản cho những người dùng/chương trình khác. Đây là lý do tại sao bạn muốn lấy dữ liệu và lưu trữ nó trong tệp có định dạng JSON. Nhưng dữ liệu được dịch như thế nào?
bảng của tác giả
Được rồi, bây giờ chúng ta biết những gì chúng ta có thể mong đợi từ việc chuyển đổi trong quá trình lưu trữ, chúng ta có thể xem xét các chức năng đi kèm với gói json tích hợp
import json
Chúng tôi có hai hàm trong thư viện json có tên là json.dump[]
và json.dumps[]
có thể được sử dụng để tuần tự hóa
Hãy nhìn vào một lúc
json. dump[] lưu trữ đối tượng dữ liệu dưới dạng chuỗi JSON trong. tập tin jsonHàm json.dump[data, file_object]
nhận hai đối số
- Dữ liệu cần được ghi vào tệp JSON
- Một đối tượng tệp có thể được sử dụng để lưu dữ liệu
thí dụ. json trông giống như sau
json. dumps[] chuyển đổi đối tượng python thành chuỗi JSONNó khá đơn giản
JSON thành dữ liệu - Giải tuần tự hóaTương tự, deserialization là quá trình chuyển đổi dữ liệu JSON thành kiểu dữ liệu gốc. Ở đây, chúng tôi chuyển đổi dữ liệu JSON trở lại từ điển trong Python. Nhưng một lần nữa chúng ta phải xem xét bảng chuyển đổi cho Python để nhận thức được những sai lầm có thể xảy ra
bảng của tác giả
Và hãy xem, nếu chúng ta mã hóa một bộ dữ liệu, nó sẽ trở thành một mảng và một mảng sẽ trở thành một danh sách. Xin hãy nhớ điều này
Tiếp theo, chúng tôi muốn kiểm tra cả hai chức năng được sử dụng để khử lưu huỳnh
json. load[] đọc các tệp json thành các loại pythonimport json
#print[json.dumps[my_data[:2], indent=4, cls=NumpyEncoder]]]
with open[my_dir+'/my_filename.json', 'w'] as f:
json.dumps[my_data, indent=4, cls=NumpyEncoder]]]
0Dữ liệu đến từ tệp example.json
và được lưu trữ trong từ điển có tên là dữ liệu
Tôi đã đề cập trong phần giới thiệu rằng tôi tình cờ gặp JSON trong khi xây dựng dự án python của riêng mình để cố gắng tìm kiếm một công việc kỹ sư máy học/khoa học dữ liệu. Mục tiêu của tôi là lưu trữ dữ liệu mà tôi đã thu thập từ API vào một tệp để sau này tôi có thể sử dụng nó để kiểm tra. Việc nhận dữ liệu từ API dưới dạng chuỗi json khá phổ biến. Với thư viện có tên là
import json
#print[json.dumps[my_data[:2], indent=4, cls=NumpyEncoder]]]
with open[my_dir+'/my_filename.json', 'w'] as f:
json.dumps[my_data, indent=4, cls=NumpyEncoder]]]
2, bạn có thể lấy dữ liệu từ API. Sau đó, bạn cần chuyển đổi dữ liệu thành một đối tượng python, điều này có thể dễ dàng thực hiện chỉ cần sử dụng import json
#print[json.dumps[my_data[:2], indent=4, cls=NumpyEncoder]]]
with open[my_dir+'/my_filename.json', 'w'] as f:
json.dumps[my_data, indent=4, cls=NumpyEncoder]]]
3 mà không cần bất kỳ đối số nàoBây giờ, hãy tưởng tượng bạn thực hiện một số tranh luận và quyết định lấy một tập hợp con dữ liệu và muốn lưu trữ nó để sử dụng sau này. Bạn đã biết rằng bạn có thể sử dụng
import json
#print[json.dumps[my_data[:2], indent=4, cls=NumpyEncoder]]]
with open[my_dir+'/my_filename.json', 'w'] as f:
json.dumps[my_data, indent=4, cls=NumpyEncoder]]]
4 và có sẵn nó để sử dụng sau này. ỪSự kết luậnRất vui vì bạn đã học cách lưu trữ dữ liệu theo cách có thể quản lý được khá phổ biến với nhiều ngôn ngữ khác. Bạn cũng biết nơi để tra cứu các bảng chuyển đổi và bạn đã thấy một số ví dụ mà bạn có thể thay đổi mà không cần nỗ lực nhiều để chúng hữu ích cho nhu cầu của bạn. Tôi đã tóm tắt các bước chính của quy trình làm việc trong 4 điểm sau