Je tire une somme d'un DB qui est une valeur décimale.
J'essaie d'utiliser cette valeur dans un résultat JSON django ne peut pas sérialiser le Quels doivent arriver, si possible, pour obtenir un résultat comme suit? < / p> décimal code>.
Je peux le convertir en une chaîne, mais j'aimerais un type numérique dans le JSON.
Si j'essaie de le convertir en un float code> Je me retrouve avec plus de 2 décimales. P>
4 Réponses :
Ce que vous pouvez faire est de prolonger la classe JSondecoder pour fournir un sérialiseur personnalisé pour le type décimal, similaire à l'exemple de ce document: http://docs.python.org/py3k/library/json.html c'est un exemple de fabrication de la façon dont le faire , espérons-le un bon point de départ pour vous. P> p>
Merci, j'aime cette solution le meilleur jusqu'à présent :)
En fait, Django fournit une classe intégrée pour exactement ce - django.core.rserializers.json.djangojsonencoder code> - que vous pouvez utiliser directement en faisant simplejson.dumps (myDICT, classe = djangojsonencoder) < / code>. Il traite également des datetes.
@Daniel merci. 'Classe = Djangojsonencoder' nécessaire pour être "CLS = Djangojsonencoder". Cela fonctionne, mais cela me donne une valeur de chaîne :(
Hehe Cela me donne juste une valeur de chaîne identique à celle de «STR (montant)» dans les appels JSON.Dumpes ... J'ai décidé de simplement le laisser comme une chaîne et de le gérer sur le client ..
Vous pouvez le faire ce que vous voulez, changez simplement le retour "% .2f"% obj code> ligne.
à partir de ce lien: http://code.google.com/ P / SimpleJson / Problèmes / Détails? ID = 34 . P>
Je peux vous dire que l'arbre pense: p>
Utilisez CJSON Cela fonctionne bien avec des valeurs décimales. P> LI>
Utilisez de la correction de singe comme l'exemple de ce lien: http : //code.google.com/p/simplejson/issues/detail? Id = 61 P> Li>
Utilisez JSONUTIL Voir le dernier commentaire: http: //code.google.com/p/simplejson/issues/detail?id=34#c28 p> LI> ul>
Vous pouvez trouver plus de détails dans le premier lien. p>
Il n'y a pas de type décimal dans JavaScript, ainsi que parmi les types standard de Python. C'est un type de base de données - SPCIFIC et ne fait pas partie de JSON. Prendre des flotteurs ou faire un arithmétique entier. P>
Oui, je sais qu'il n'y a pas de type correspondant en JavaScript, mes valeurs ne seront jamais aussi grandes. Je veux simplement qu'ils sortent dans un format monétaire régulier "5.95", mais pas en format à la chaîne.
JSON Standard est indépendant de JS. Il définit également des nombres comme séquence de chiffres avec facultatif - et. Ne pas discuter de la représentation de la mémoire après avoir analysé le nombre. Decimal est également standard en Python à partir de 2,4, vous devez l'importer explicitement? C'est néanmoins intégré.
Décimal peut être jeté sur un flotteur que JavaScript sait comment traiter
Dans ma question, j'ai noté que je ne voulais pas transmettre un flottant en raison d'un grand nombre de décimales.
Je ne sais pas grand chose de Django, mais si vous avez besoin de deux décimales toujours et qu'il n'est pas possible de faire exactement ce que vous voulez que vous puissiez multiplier par 100 et travailler avec elle comme un entier.
JSON n'est défini que pour avoir des flotteurs à double précision pour les nombres. Que vous achète-t-il de garder vos chiffres comme des décimales?
Je n'ai pas besoin de mes chiffres pour être décimal, ils ne seront jamais aussi grands. C'est juste ce que je retire de la DB car ce sont des valeurs monétaires. Je n'ai pas été ravis d'utiliser l'int * 100 et les flotteurs me donnent plus de deux décimales. J'espérais juste qu'il y aurait une solution plus élégante ...