JSON-файл [https://drive.google.com/file/d/1Jb3OdoffyA71vYfojxLedZNPDLq9bn7b/view?usp=sharing]
Я пытаюсь прочитать файл JSON в Python, файл JSON такой же, как ссылка выше. Код, который я написал, выглядит следующим образом:
lst = []
for line in open(json_path,'r'):
lst.append(json.loads(line))
Но по какой-то причине у меня продолжала появляться эта ошибка JSONDecodeError: Expecting value: line 2 column 1 (char 1)
Мне интересно, я сделал что-то не так с кодом или в файле JSON есть ошибка?
Вы можете удалить линию разрыва (\n
) перед использованием функции json.loads
(спасибо @DeepSpace за комментарий):
import json
lst = []
for line in open("sample.json",'r'):
stripped = line.strip("\n")
if stripped != "":
lst.append(json.loads(stripped))
lst
Также вы можете использовать модуль ast
:
import ast
lst = []
for line in open("sample.json",'r'):
if line.strip("\n") != "":
lst.append(ast.literal_eval(line))
ast.literal_eval
изменяет словарь или список в форме строки (например, "[1,2,3]"
) на пригодный для использования словарь или список в Python (например, [1,2,3]
).
Вывод обоих кодов выше будет:
[{'content': [{'c_id': '002',
'p_id': 'P02',
'source': 'internet',
'type': 'org'},
{'c_id': '003', 'p_id': 'P03', 'source': 'internet', 'type': 'org'},
{'c_id': '005', 'p_id': 'K01', 'source': 'news', 'type': 'people'}],
'doc_id': '7098727',
'id': 'lni001',
'pub_date': '20220301',
'unique_id': '64WP-UI-POLI'},
{'content': [{'c_id': '002',
'p_id': 'P02',
'source': 'internet',
'type': 'org'},
{'c_id': '003', 'p_id': 'P03', 'source': 'internet', 'type': 'org'},
{'c_id': '005', 'p_id': 'K01', 'source': 'news', 'type': 'people'}],
'doc_id': '7098727',
'id': 'lni001',
'pub_date': '20220301',
'unique_id': '64WP-UI-POLI'},
{'content': [{'c_id': '002',
'p_id': 'P02',
'source': 'internet',
'type': 'org'},
{'c_id': '003', 'p_id': 'P03', 'source': 'internet', 'type': 'org'},
{'c_id': '005', 'p_id': 'K01', 'source': 'news', 'type': 'people'}],
'doc_id': '7098727',
'id': 'lni001',
'pub_date': '20220301',
'unique_id': '64WP-UI-POLI'},
{'content': [{'c_id': '012',
'p_id': 'K21',
'source': 'internet',
'type': 'location'},
{'c_id': '034', 'p_id': 'P17', 'source': 'news', 'type': 'people'},
{'c_id': '098', 'p_id': 'K54', 'source': 'news', 'type': 'people'}],
'doc_id': '7097889',
'id': 'lni002',
'pub_date': '20220301',
'unique_id': '64WP-UI-CFGT'},
{'content': [{'c_id': '012',
'p_id': 'K21',
'source': 'internet',
'type': 'location'},
{'c_id': '034', 'p_id': 'P17', 'source': 'news', 'type': 'people'},
{'c_id': '098', 'p_id': 'K54', 'source': 'news', 'type': 'people'}],
'doc_id': '7097889',
'id': 'lni002',
'pub_date': '20220301',
'unique_id': '64WP-UI-CFGT'}]
Большое спасибо, но мне любопытно, как вы можете сказать/проверить, что каждая строка json является диктовкой?
@CodingStark Рад помочь. Потому что они в форме словаря. Словари начинаются с {
и заканчиваются на }
. Конечно, было бы гораздо больше элементов, определяющих словарь.
Понятно! Большое спасибо. Кроме того, я попробовал подход line.strip("\n")
, но он выдал мне ошибку JSONDecodeError: Expecting value: line 1 column 1 (char 0)
@CodingStark О, это немного странно! Потому что я скачал файл sample.json
и попробовал оба упомянутых скрипта, и все они работают нормально! Не уверен, почему вы получаете эту ошибку.
@CodingStark О, в вашем примере файла JSON есть несколько строк разрыва без каких-либо других символов. Я отредактировал ответ в соответствии с вашим комментарием, надеюсь, теперь он соответствует вашему вопросу.
Оно работает! Большое спасибо за помощь!
Вы не можете загружать файл json построчно. Вы должны вызывать
json.loads()
для всего содержимого файла.