2017-11-15 97 views
5

Mam duży obiekt, który jest odczytywany z pliku binarnego przy użyciu struct.unpack, a niektóre z wartości są tablicami znaków, które są odczytywane jako bajty.Python 3 - Zapisywanie danych z struct.unpack do json bez indywidualnej przekształcania

Ponieważ tablice znaków w Pythonie 3 są odczytywane jako bajty zamiast ciągów (jak w Pythonie 2), nie można ich bezpośrednio przekazać do json.dumps, ponieważ "bajty" nie są serializowane przez JSON.

Czy istnieje sposób, aby przejść z rozpakowanej struktury do json bez przeszukiwania każdej wartości i konwersji bajtów na ciągi?

+0

W jaki sposób dane binarne będą reprezentowane w JSON? Jest to nie tyle problem z Pythonem, co z reprezentacją. Czy dane binarne powinny zostać przekonwertowane na base64? Dekodować jako Latin-1? Nadal musisz przejść do prawidłowej struktury danych, która może być reprezentowana. –

Odpowiedz

6

Możesz użyć niestandardowego kodera w tym przypadku. Zobacz poniżej:

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

Doskonały, dokładnie to, czego szukałem! – dexgecko