crear un objeto json válido en python

Cada línea es JSON válida, pero necesito que el archivo completo sea JSON válido.

Tengo algunos datos que se agregan desde un servicio web y se vuelcan en un archivo, por lo que es JSON-eaque, pero no es JSON válido, por lo que no se puede procesar de la manera simple e intuitiva que pueden hacerlo los archivos JSON. Dolor en el cuello , se ve (más o menos) así:

{"record":"value0","block":"0x79"} {"record":"value1","block":"0x80"} 

He estado intentando reinterpretarlo como JSON válido, mi último bash se parece a esto:

 with open('toy.json') as inpt: lines = [] for line in inpt: if line.startswith('{'): # block starts lines.append(line) 

Sin embargo, como probablemente pueda deducir por el hecho de que estoy planteando esta pregunta, eso no funciona, ¿alguna idea sobre cómo podría abordar este problema?

EDITAR:

Intenté esto:

 with open('toy_two.json', 'rb') as inpt: lines = [json.loads(line) for line in inpt] print(lines['record']) 

pero consiguió el siguiente error:

 Traceback (most recent call last): File "json-ifier.py", line 38, in  print(lines['record']) TypeError: list indices must be integers, not str 

Idealmente, me gustaría interactuar con él como pueda con JSON normal, es decir, data['value']

Editar II

 with open('transactions000000000029.json', 'rb') as inpt: lines = [json.loads(line) for line in inpt] for line in lines: records = [item['hash'] for item in lines] for item in records: print item 

Esto parece NDJSON con el que he estado trabajando recientemente. La especificación está aquí y no estoy seguro de su utilidad. ¿Funciona lo siguiente?

 with open('the file.json', 'rb') as infile: data = infile.readlines() data = [json.loads(item.replace('\n', '')) for item in data] 

Esto debería darle una lista de diccionarios.

Cada línea parece un documento JSON válido.

Es el formato de “Líneas JSON” ( http://jsonlines.org/ )

Intente procesar cada línea de forma independiente ( json.loads(line) ) o utilice una biblioteca especializada ( https://jsonlines.readthedocs.io/en/latest/ ).

 def process(oneline): # do what you want with each line print(oneline['record']) with open('toy_two.json', 'rb') as inpt: for line in inpt: process(json.loads(line))