Standart biçim json modülü ile yüzer
Standart python 2.6 json module yüzer listesi seri hale getirmek için kullanıyorum. Ancak, bu gibi sonuçlar alıyorum:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Yalnızca iki ondalık basamak ile format için yüzer istiyorum. Çıkış bu gibi görünmelidir:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Kendi JSON Kodlayıcı benim sınıf tanımlama denedim:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Bu tek yüzen bir nesne için çalışır:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Ama başarısız iç içe nesneler:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Dış bağımlılıkları istemiyorum, standart json modülü ile sopa tercih ederim.
Bunu nasıl başarabilir?
CEVAP
Ne yazık ki, maymun-yama, kanaatimce; json
standart kütüphane paketinde bir tasarım kusuru gösterir) ile bunu yapmak için var. E. g., bu kod:
import json
from json import encoder
encoder.FLOAT_REPR = lambda o: format(o, '.2f')
print json.dumps(23.67)
print json.dumps([23.67, 23.97, 23.87])
yayan:
23.67
[23.67, 23.97, 23.87]
sizin arzu ettiğiniz gibi. Belli ki, orada olmalı bir şekilde tasarlandı geçersiz FLOAT_REPR
böylece HER temsil bir şamandıra altında kontrol istiyorsanız, bunun için; ama ne yazık ki bu böyle değil json
paket tasarlanmıştır:-(.
'json modülü s, dönüştürür sözlük...
Hangi JSON modülü Python 2.5 kullanabi...
Nasıl ayrıştırma Scala standart Scala ...
Dahil olmadan Ruby modülü üzerinde bir...
Newtonsoft Dönüştürmek.Json.Seri.Belir...