J'ai peur, il n'y a aucune façon de le réaliser automatiquement dans la simplejson de la bibliothèque.
Le scanner et le décodeur dans simplejson sont conçus pour produire de texte unicode. Pour ce faire, la bibliothèque utilise une fonction appelée c_scanstring
(si elle est disponible, pour la vitesse), ou py_scanstring
si la version de C n'est pas disponible. L' scanstring
fonction est appelée plusieurs fois par près de chaque routine qui simplejson a pour le décodage d'une structure qui pourrait contenir du texte. Vous devez soit monkeypatch l' scanstring
de la valeur en simplejson.décodeur, ou sous - JSONDecoder
et de fournir assez bien votre propre ensemble de la mise en œuvre de tout ce qui peut contenir du texte.
La raison que simplejson sorties unicode, cependant, est que la spécification json mentionne spécifiquement que "Une chaîne est un ensemble de zéro ou plusieurs caractères Unicode"... pour l'unicode est assumé en tant que partie du format lui-même. Simplejson de l' scanstring
mise en œuvre va jusqu'à analyser et à interpréter unicode échappe (même vérification des erreurs pour la malformation de multi-octets charset représentations), de sorte que la seule façon fiable de retourner la valeur pour vous, c'est comme de l'unicode.
Si vous avez une vieille bibliothèque, qui a besoin d'un str
, je vous recommande soit laborieusement de recherche imbriquée structure de données après l'analyse (qui je le reconnais est ce que vous avez explicitement dit que tu voulais éviter... désolé), ou peut-être emballer vos bibliothèques dans une sorte de façade où vous pouvez vous masser les paramètres d'entrée à un niveau plus granulaire. La deuxième approche peut-être plus facile à gérer que la première si vos structures de données sont en effet profondément imbriqués.