Maison >développement back-end >Tutoriel Python >Comment analyser efficacement les données JSON avec plusieurs objets intégrés en Python ?
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.
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 |
... | ... |
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.
<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]
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!