Chargement et analyse d'un fichier JSON contenant plusieurs objets JSON
Contrairement aux fichiers JSON standard, qui encapsulent toutes les données dans un seul objet ou tableau, certains formats JSON stockent des objets individuels sous forme de lignes distinctes dans un fichier texte. Cela peut entraîner des difficultés lors de la tentative d'analyse d'un tel fichier en Python.
Résolution de l'erreur ValueError
Lors de l'utilisation de la fonction json.load() de Python pour charger un fichier JSON avec plusieurs objets, vous pouvez rencontrer une exception « ValueError : Extra data ». Cette erreur indique que le fichier contient des données inattendues après le premier objet analysé.
Solution : analyse ligne par ligne
Pour gérer ce problème, vous devez traiter chaque ligne du fichier en tant qu'objet JSON indépendant. Remplacez votre code actuel par ce qui suit :
import json data = [] with open('file') as f: for line in f: data.append(json.loads(line))
Ce code parcourt chaque ligne du fichier, l'analyse en tant qu'objet JSON et l'ajoute à une liste.
Prise en compte des fichiers volumineux
Si le fichier JSON est particulièrement volumineux, l'ajout de tous les objets à une seule liste peut consommer une mémoire excessive. Pour atténuer cela, traitez chaque objet séparément avant de passer à la ligne suivante. Évitez :
data = [] # List of all objects
Au lieu de cela, traitez chaque objet selon vos besoins :
for line in f: process_object(json.loads(line))
Gestion des objets JSON délimités
Si votre fichier JSON contient des objets séparés par des délimiteurs, tels que des virgules ou des nouvelles lignes, vous pouvez utiliser la technique suivante pour analyser chacun objet :
import json, io # Read delimited JSON objects from a file with open('file') as f: json_string = f.read() # Create a buffered reader json_buffer = io.StringIO(json_string) while True: # Read next JSON object from the buffer json_object = json.load(json_buffer) # Process JSON object if not json_object: # Reached the end of the file break
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!