So einfach scheint das aber nicht zu gehen. Ich sehe keine Möglichkeit das Format der bekannten Datentypen zu ändern. Man kann anscheinent die Ausgabe nur bei unbekannten Objekten beeinflussen.
Also nehme ich Decimal. Denn das kann JSON normalerweise nicht.
Code: Alles auswählen
import decimal
import json
class WeaveJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, decimal.Decimal):
#~ return "%.2f" % round(obj, 2) # -> "1.19"
return round(obj, 2) # -> 1.1899999999999999
return super(WeaveJSONEncoder, self).default(obj)
data = {"foo":decimal.Decimal('1.19'), "bar": 2.19}
print json.dumps(data, cls=WeaveJSONEncoder)
Code: Alles auswählen
{"foo": 1.1899999999999999, "bar": 2.1899999999999999
Mit return "%.2f" % round(obj, 2) erhalte ich aber Strings in JSON und keine Zahl mehr:
Code: Alles auswählen
{"foo": "1.19", "bar": "2.19"}
Code: Alles auswählen
{"foo": 1.19, "bar": 2.19}