2017-11-15 14 views
5

Tôi có một đối tượng lớn được đọc từ tệp nhị phân sử dụng struct.unpack và một số giá trị là mảng ký tự được đọc dưới dạng byte.Python 3 - Viết dữ liệu từ struct.unpack vào json mà không cần khai báo riêng lẻ

Vì mảng ký tự trong Python 3 được đọc dưới dạng byte thay vì chuỗi (như trong Python 2), chúng không thể được chuyển trực tiếp tới json.dumps vì "byte" không thể được tuần tự hóa JSON.

Có cách nào để đi từ cấu trúc chưa được đóng gói thành json mà không tìm kiếm qua từng giá trị và chuyển đổi byte thành chuỗi không?

+0

Vậy dữ liệu nhị phân sẽ được thể hiện bằng JSON như thế nào? Đây không phải là vấn đề về Python như một vấn đề đại diện. Dữ liệu nhị phân có nên được chuyển thành base64 không? Được giải mã là Latin-1? Bạn vẫn phải chuyển sang một cấu trúc dữ liệu hợp lệ có thể được biểu diễn. –

Trả lời

6

Bạn có thể sử dụng bộ mã hóa tùy chỉnh trong trường hợp này. Xem bên dưới

import json 

x = {} 
x['bytes'] = [b"i am bytes", "test"] 
x['string'] = "strings" 
x['unicode'] = u"unicode string" 


class MyEncoder(json.JSONEncoder): 
    def default(self, o): 
     if type(o) is bytes: 
      return o.decode("utf-8") 
     return super(MyEncoder, self).default(o) 


print(json.dumps(x, cls=MyEncoder)) 
# {"bytes": ["i am bytes", "test"], "string": "strings", "unicode": "unicode string"} 
+0

Hoàn hảo, chính xác những gì tôi đang tìm kiếm! – dexgecko

Các vấn đề liên quan