Как мне разобрать неисправный файл json из python с помощью модуля json? - PullRequest
0 голосов
/ 05 апреля 2020

У меня большой размер файла json для анализа с python, но он неполон (то есть отсутствуют скобки в конце). Файл json состоит из одного большого объекта json, который содержит json объектов внутри. Весь json объект во внешнем json объекте завершен, только завершающие скобки отсутствуют. например, его структура такова.

{bigger_json_head:value, another_key:[{small_complete_json1},{small_complete_json2}, ...,{small_complete_json_n}, 

Итак, окончательное "]}" отсутствует. однако каждый маленький json образует одну строку, поэтому, когда я попытался напечатать каждую строку имеющегося у меня файла json, я получил каждый json объект в виде одной строки.

, поэтому я попытался использовать:

with open("file.json","r",encoding="UTF-8") as f: 
    for line in f.readlines()
    line_arr.append(line)

Я ожидал получить список со строкой json объекта в качестве элемента

, а затем попробовал ниже после процесса:

for json_line in line_arr:
    try:
       json_str = json.loads(json_line)
       print(json_str)
    except json.decoder.JSONDecodeError:
       continue

Я ожидал, что из этого блока кода, кроме первой и последней строки, этот код выведет строку json на консоль. Однако он ничего не печатал и только что получил ошибку декодирования.

Кто-нибудь решал подобную проблему? пожалуйста помоги. Спасибо

1 Ответ

1 голос
/ 05 апреля 2020

Если в неисправном файле json пропущен только последний "]}", то вы можете на самом деле исправить его перед анализом. Вот пример кода для иллюстрации:

with open("file.json","r",encoding="UTF-8") as f:
  faulty_json_str = f.read()
  fixed_json_str = faulty_json_str + ']}'
  json_obj = json.loads(fixed_json_str)
...