129 votes

De chargement et de l'Analyse du fichier JSON en python

Je suis en train de charger et d'analyser un fichier JSON en python. Même si je suis coincé à essayer de charger le fichier:

import json    
json_data = open('file')
data = json.load(json_data)

Rendements:

ValueError: Extra data: line 2 column 1 - line 225116 column 1 (char 232 - 160128774)

J'ai regardé http://docs.python.org/library/json.html mais c'est assez décourageant de lire à travers cette horrible à la recherche de la documentation.

274voto

Martijn Pieters Points 271458

Vous devez analyser votre fichier ligne par ligne:

import json

data = []
with open('file') as f:
    for line in f:
        data.append(json.loads(line))

Chaque ligne contient JSON valide, mais dans l'ensemble, il n'est pas une valeur JSON comme il n'y a pas de haut-niveau de la liste ou de la définition de l'objet.

Notez que parce que le fichier contient JSON par ligne, et vous êtes sauvé les maux de tête, essayant de l'analyser en une seule fois ou de comprendre un flux JSON de l'analyseur. Vous pouvez désormais choisir de traiter chaque ligne séparément avant de passer à la suivante, d'économiser la mémoire dans le processus. Vous ne voulez probablement pas à l'ajouter à chaque résultat d'une liste et ensuite le processus de tout, si votre fichier est très gros.

Si vous avez un fichier contenant des objets JSON avec des séparateurs entre-deux, utiliser Comment puis-je utiliser le json module pour lire dans un objet json à la fois? afin d'analyser différents objets à l'aide d'un tampon de la méthode.

1voto

Daniel Roseman Points 199743

Qui est mal formaté. Vous avez un objet JSON par ligne, mais elles ne sont pas contenues dans une plus grande structure de données (c'est à dire un tableau). Vous aurez besoin soit de le reformater en sorte qu'il commence avec [ et se termine par ] avec une virgule à la fin de chaque ligne, ou analyser ligne par ligne comme distincts des dictionnaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X