Comment conserver les types de chaînes lors de l'analyse de JSON dans Python 2 ?

Mary-Kate Olsen
Libérer: 2024-11-03 00:38:29
original
789 Les gens l'ont consulté

How to Preserve String Types When Parsing JSON in Python 2?

Préserver les types de chaînes lors de l'analyse de JSON dans Python 2

L'analyse de JSON dans Python 2 peut parfois entraîner la conversion de valeurs de chaîne en objets Unicode. Cela peut poser des problèmes lors de l'interface avec des bibliothèques qui nécessitent exclusivement des objets chaîne.

Conversion JSON en objets Unicode

Lors de l'utilisation de JSON ou simplejson pour charger des fichiers texte codés en ASCII dans Python 2, vous pouvez rencontrer le problème où les valeurs de chaîne sont converties en objets Unicode. Ceci s'explique par le mécanisme d'encodage par défaut de Python 2, qui suppose Unicode pour le texte.

Option d'analyse alternative : PyYAML

Pour résoudre ce problème, envisagez d'utiliser PyYAML pour analyser JSON. fichiers. PyYAML traite les clés et les valeurs comme des objets chaîne par défaut, fournissant une solution simple pour préserver les types de chaînes.

Exemple

<code class="python">import yaml
list_dump = json.dumps(['a', 'b'])
yaml.safe_load(list_dump)  # Returns string objects: ['a', 'b']</code>
Copier après la connexion

Remarques :

  • La fonction safe_load de PyYAML est recommandée pour l'analyse JSON.
  • Les caractères Unicode seront toujours conservés dans les objets chaîne.
  • Ruamel YAML est un analyseur YAML alternatif avec plus fonctionnalités avancées.

Fonction de conversion

Si PyYAML n'est pas une option ou si vous devez travailler avec Unicode, une fonction de conversion telle que celle proposée par Mark Amery peut être utilisé.

Exemple

<code class="python">def convert_to_str(data):
    """Convert Unicode values to strings."""
    if isinstance(data, dict):
        return {convert_to_str(k): convert_to_str(v) for k, v in data.items()}
    elif isinstance(data, list):
        return [convert_to_str(v) for v in data]
    elif isinstance(data, unicode):
        return data.encode('utf-8')
    else:
        return data</code>
Copier après la connexion

En utilisant cette fonction comme object_hook lors du chargement JSON, les valeurs Unicode seront converties en chaînes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal