59 lines
1.0 KiB
Python
59 lines
1.0 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
import json
|
|
from datetime import date, datetime
|
|
from functools import singledispatch
|
|
|
|
|
|
# uncomment if Python version < 3.4 and comment out above line
|
|
# from singledispatch import singledispatch
|
|
|
|
|
|
class Parrot():
|
|
def __init__(self, name, color):
|
|
self._name = name
|
|
self._color = color
|
|
|
|
@property
|
|
def name(self):
|
|
return self._name
|
|
|
|
@property
|
|
def color(self):
|
|
return self._color
|
|
|
|
|
|
parrots = [
|
|
Parrot('Polly', 'green'),
|
|
Parrot('Peggy', 'blue'),
|
|
Parrot('Roger', 'red'),
|
|
]
|
|
|
|
data = {
|
|
'spam': [1, 2, 3],
|
|
'ham': ('a', 'b', 'c'),
|
|
'date': date(2014, 8, 1),
|
|
'timestamp': datetime(2014, 8, 1, 15, 34, 19),
|
|
'parrots': parrots,
|
|
}
|
|
|
|
|
|
@singledispatch
|
|
def encode(obj):
|
|
return obj
|
|
|
|
|
|
@encode.register(date)
|
|
def encode_date(date_obj):
|
|
return date_obj.isoformat()
|
|
|
|
|
|
@encode.register(Parrot)
|
|
def encode_parrot(parrot_obj):
|
|
return {'name': parrot_obj.name, 'color': parrot_obj.color}
|
|
|
|
|
|
# register other encoding functions here
|
|
|
|
print(json.dumps(data, default=encode, indent=4))
|