2016-04-08 3 views
2

Так вот это стандартный способ чтения в файле формата JSON в PythonКак читать файл JSON с несколькими объектами JSON в Python?

import json 
from pprint import pprint 

with open('ig001.json') as data_file:  
    data = json.load(data_file) 

pprint(data) 

Однако мой JSON-файл, который я хочу прочитать имеет несколько объектов JSON в нем. Так что это выглядит примерно так:

[{}, {} .... ]

[{}, {} .... ]

Где это представляет 2 объекта JSON, и внутри каждого объекта внутри каждого {} существует куча пар ключ: значение.

Так что, когда я пытаюсь читать это, используя стандартный прочитать код, который я выше, я получаю ошибку:

Traceback (most recent call last): File "jsonformatter.py", line 5, in data = json.load(data_file) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py", line 290, in load **kw) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py", line 338, in loads return _default_decoder.decode(s) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 369, in decode raise ValueError(errmsg("Extra data", s, end, len(s))) ValueError: Extra data: line 3889 column 2 - line 719307 column 2 (char 164691 - 30776399)

Где линия 3889, где первый объект JSON заканчивается и начинается следующий, то сама строка выглядит как "] [".

Любые идеи о том, как исправить это, будут оценены, спасибо!

+2

Вы можете разместить свой файл в формате JSON? –

+0

Вы имеете в виду несколько массивов JSON, верно? –

+0

Пожалуйста, укажите больше данных о файле JSON, который у вас есть. –

ответ

2

Без ссылки ваш файл в формате JSON, я буду иметь, чтобы сделать некоторые предположения:

  1. JSon массивы верхнего уровня не каждый по своей собственной линии (так как первая ошибка синтаксического анализа на линии 3889), поэтому нам нелегко
  2. Это единственный недопустимый JSON, присутствующий в файле.

Чтобы это исправить:

# 1. replace instances of `][` with `]<SPLIT>[` 
# (`<SPLIT>` needs to be something that is not present anywhere in the file to begin with) 

raw_data = data_file.read() # we're going to need the entire file in memory 
tweaked_data = raw_data.replace('][', ']<SPLIT>[') 

# 2. split the string into an array of strings, using the chosen split indicator 

split_data = tweaked_data.split('<SPLIT>') 

# 3. load each string individually 

parsed_data = [json.loads(bit_of_data) for bit_of_data in split_data] 

(простите ужасные имена переменных)

Смежные вопросы