Json mise en forme de chaîne avec python
J'aimerais savoir si il y a moyen de formater la résultante des chaînes de la enconding d'un objet json en python. Par exemple, supposons que j'ai le dictionnaire suivant:
{'a': 12.73874, 'b': 1.74872, 'c': 8.27495}
et le résultat de l'encodage json est:
{
"c": 8.27495,
"b": 1.74872,
"a": 12.73874
}
tandis que le résultat que je veux c'est:
{
"a": 12.74,
"c": 8.28,
"b": 1.75
}
Avis de l'ordre des éléments et de la décimale de chaque nombre. Est-il possible de faire cela?
Merci d'avance!
Ce JSON ecnoder utilisez-vous? Celui qui est livré avec Python, ou
Je pense que le point de JSON était d'être capable de restaurer l'objet que vous nourrissez c'est exactement ça. Dans ce cas, si vous tronquez après le point décimal, vous ne pourrez plus restaurer le dictionnaire de JSON (bien que le tri est une autre histoire)
Je suis en utilisant le json qui est livré avec python. Je pense que le problème ici n'est pas avec json lui-même mais avec l'usage que je suis en utilisant json. Je l'utilise pas comme un moyen pour être en mesure de exactement restaurer les objets que j'encode (restauration de l'objet n'est même pas important dans le contexte de ma demande), mais comme un moyen facile de les enregistrer dans une lisible par l'homme. C'est pourquoi le nombre de décimales et de l'ordre de la matière. Mais je suppose que ce sera plus simple si je imprimer le fichier moi-même, au lieu d'utiliser json 🙂
remarque: les deux
simplejson
, ou encore un autre?Je pense que le point de JSON était d'être capable de restaurer l'objet que vous nourrissez c'est exactement ça. Dans ce cas, si vous tronquez après le point décimal, vous ne pourrez plus restaurer le dictionnaire de JSON (bien que le tri est une autre histoire)
Je suis en utilisant le json qui est livré avec python. Je pense que le problème ici n'est pas avec json lui-même mais avec l'usage que je suis en utilisant json. Je l'utilise pas comme un moyen pour être en mesure de exactement restaurer les objets que j'encode (restauration de l'objet n'est même pas important dans le contexte de ma demande), mais comme un moyen facile de les enregistrer dans une lisible par l'homme. C'est pourquoi le nombre de décimales et de l'ordre de la matière. Mais je suppose que ce sera plus simple si je imprimer le fichier moi-même, au lieu d'utiliser json 🙂
remarque: les deux
"%.2f" % v
et round(v, 2)
produire 8.27
pour v = 8.27495
, pas 8.28
.OriginalL'auteur Alberto A | 2012-07-26
Vous devez vous connecter pour publier un commentaire.
Que vous essayez d'utiliser JSON pour quelque chose, il n'est pas prévu pour, c'est donc sans surprise il ne fonctionne pas bien. Vous pourriez envisager d'utiliser la le code source de Python
json
module comme un point de départ pour votre propre code de sortie, mais il est probablement plus facile de commencer à partir de zéro – c'est pas si complexe une tâche d'écrire une telle fonction de sortie.Une meilleure option serait d'utiliser le haut-ast module: docs.python.org/2/library/ast.html
OriginalL'auteur Sven Marnach
Si vous utilisez 2.6+, vous pouvez utiliser ce faire:
print json.dumps(jsonStr, sort_keys=True, indent=2, separators=(',', ': '))
http://docs.python.org/2/library/json.html
OriginalL'auteur onetwopunch
Pour Python ainsi que JSON, l'ordre dans le dict porte pas de sens. Utiliser des listes au lieu de les dicts si vous avez l'esprit.
Si vous ne voulez commander la sortie JSON (qui est, préfèrent
{1:0, 2:0}
sur{2:0, 1:0}
, même s'ils sont équivalents), vous pouvez utiliser lecollections.OrderedDict
qui va rappeler à l'ordre les éléments ont été insérés.Ce bug qui ressemble comme il a été fixé en décembre 2010: hg.python.org/cpython/rev/64a97c4ebadc
Le issue6105 fournit une solution de contournement pour les versions antérieures:
json.encoder.c_make_encoder = None
avant.dumps()
.OriginalL'auteur tiwo
Vous pouvez changer la façon dont votre flotte sont sérialisés en les mettant dans une classe personnalisée et en remplaçant la
__repr__
méthode, comme ceci:Cette affiche:
Cela résout la moitié de votre question, au moins.
OriginalL'auteur jterrace
Essayer
sort_keys=True
avecjson.dumps
oujson.JSONEncoder.__init__
. Par exemple,Puis un coup d'oeil à stackoverflow.com/questions/4402491/...
OriginalL'auteur tiwo
De sortie
Comme alternative, vous pouvez utiliser
yaml
, exemple.OriginalL'auteur jfs