Pregunta Cargando y analizando un archivo JSON con múltiples objetos JSON en Python


Estoy tratando de cargar y analizar un archivo JSON en Pitón. Pero estoy atrapado tratando de cargar el archivo:

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

Rendimientos:

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

Miré 18.2. json - Codificador y decodificador JSON en la documentación de Python, pero es bastante desalentador leer esta horrible documentación.


74
2017-09-16 23:00


origen


Respuestas:


Usted tiene un Archivo de texto en formato JSON Lines. Necesita analizar su archivo línea por línea:

import json

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

Cada línea contiene JSON válido, pero como un todo, no es un valor JSON válido ya que no hay una lista de nivel superior o una definición de objeto.

Tenga en cuenta que debido a que el archivo contiene JSON por línea, se guardan los dolores de cabeza de intentar analizarlo todo de una vez o descubrir un analizador JSON de transmisión. Ahora puede optar por procesar cada línea por separado antes de pasar a la siguiente, guardando la memoria en el proceso. Probablemente no desee agregar cada resultado a una lista y entonces procesa todo si tu archivo es realmente grande.

Si tiene un archivo que contiene objetos JSON individuales con delimitadores intermedios, use ¿Cómo uso el módulo 'json' para leer en un objeto JSON a la vez? para analizar objetos individuales usando un método de buffer.


159
2017-09-16 23:08



Ese es mal formateado Usted tiene un objeto JSON por línea, pero no están contenidos en una estructura de datos más grande (es decir, una matriz). Deberá volver a formatearlo para que comience con [ y termina con ] con una coma al final de cada línea, o analizarlo línea por línea como diccionarios separados.


5
2017-09-16 23:09



para aquellos que tropiezan con esta pregunta: el pitón jsonlines biblioteca (mucho más joven que esta pregunta) elegantemente. maneja archivos con un documento json por línea. ver https://jsonlines.readthedocs.io/


2
2017-07-17 18:00