Maison >développement back-end >Tutoriel Python >Comment analyser efficacement les données JSON avec plusieurs objets intégrés en Python ?

Comment analyser efficacement les données JSON avec plusieurs objets intégrés en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-29 12:32:29515parcourir

How to Efficiently Parse JSON Data with Multiple Embedded Objects in Python?

Défis de l'analyse JSON avec plusieurs objets intégrés

Cet article aborde le défi de l'extraction de données à partir d'un fichier JSON contenant plusieurs objets JSON imbriqués. De tels fichiers posent souvent des problèmes lorsqu'il s'agit de grands ensembles de données.

Énoncé du problème

Considérons un fichier JSON avec plusieurs objets JSON comme suit :

<code class="json">{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes",
 "Code":[{"event1":"A","result":"1"},…]}
{"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No",
 "Code":[{"event1":"B","result":"1"},…]}
{"ID":"AA356","Timestamp":"20140103", "Usefulness":"No",
 "Code":[{"event1":"B","result":"0"},…]}
…</code>

La tâche consiste à extraire les valeurs « Horodatage » et « Utilité » de chaque objet dans un bloc de données :

Timestamp Usefulness
20140101 Yes
20140102 No
20140103 No
... ...

Présentation de la solution

Pour relever ce défi, nous utilisons la méthode json.JSONDecoder.raw_decode en Python . Cette méthode permet de décoder de grandes chaînes d'objets JSON « empilés ». Il renvoie la dernière position de l'objet analysé et un objet valide. En repassant la position renvoyée à raw_decode, nous pouvons reprendre l'analyse à partir de ce point.

Implémentation

<code class="python">from json import JSONDecoder, JSONDecodeError
import re

NOT_WHITESPACE = re.compile(r'\S')

def decode_stacked(document, pos=0, decoder=JSONDecoder()):
    while True:
        match = NOT_WHITESPACE.search(document, pos)
        if not match:
            return
        pos = match.start()
        
        try:
            obj, pos = decoder.raw_decode(document, pos)
        except JSONDecodeError:
            # Handle errors appropriately
            raise
        yield obj

s = """

{“a”: 1}  


[
1
,   
2
]


"""

for obj in decode_stacked(s):
    print(obj)</code>

Ce code parcourt les objets JSON dans la chaîne s et imprime chaque objet :

{'a': 1}
[1, 2]

Conclusion

La solution fournie relève efficacement le défi de l'extraction de données à partir de plusieurs objets JSON imbriqués intégrés dans un seul fichier. En utilisant la méthode json.JSONDecoder.raw_decode et en gérant les erreurs potentielles, nous pouvons traiter efficacement de grands ensembles de données. La fonction decode_stacked peut être utilisée comme un outil réutilisable pour gérer de tels formats de fichiers.

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!

Déclaration:
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