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

Patricia Arquette
Libérer: 2024-10-29 12:32:29
original
468 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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

{'a': 1}
[1, 2]
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!