Json Encoder: ошибка ожидаемого значения в Python - PullRequest
0 голосов
/ 15 апреля 2019

У меня большой Json File 350mb, и я хочу извлечь из него элементы.Код, который я использую:

with open("commitsJson3.json","r", encoding="utf-8-sig") as json_file:
    data = json.load(json_file)


for elem in data['items']:
    for e in elem['commit']:
       if 'message' in e:
           print(elem['commit'][e])

И ошибка, которую я получаю:

json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 2180 (символ 2179)

Я перешел к конкретному столбцу и строке, но не увидел никаких проблем.Я пытался проверить мой JSON с помощью некоторых онлайн-валидаторов, но он завис, потому что он слишком большой.Я могу показать вам образец, но он слишком большой, надеюсь, вы понимаете это.


{"total_count": 3, "incomplete_results": "False", "items": c "site_admin": False}, "committer": {"login": "acosding", "id ": 1539," node_id ":" ASJKDHASAD "," avatar_url ":" https://gits -5.s.fe.se / avatars / u / 1329 ? "," gravatar_id ":" ", "url": "https://gits -5.s.fe.se / api / v3 / users / acollden ", "html_url": "https://gits -5.s.fe.se / acollden"," follow_url ":" https://https://gits-5.s.fe.se/api/v3/users/acollden/followers", "follow_url": "https://gits -5.s.fe.se / api / v3 / users / acollden / follow {/ other_user} "," gists_url ":" https://gits -5.s.fe.se / api / v3 / users / acollden / gists {/ gist_id} "," starred_url ":"https://https://gits-5.s.fe.se/api/v3/users/acollden/starred{/owner}{/repo}"," subscription_url ":" https://https://gits-5.s.fe.se/api/v3/users/acollden/subscriptions", "organization_url": "https://gits -5.s.fe.se / api / v3 / users / acollden / orgs "," repos_url ":" https://https://gits-5.s.fe.se/api/v3/users/acollden/repos", "events_url": "https://https://gits-5.s.fe.se/api/v3/users/acollden/events{/privacy}"," receive_events_url ":" https://https://gits-5.s.fe.se/api/v3/users/acollden/received_events", "тип": "Пользователь"


Любая помощь была бы признательна, если бы у файла Json возникла проблема, как проверить его, будучи таким большим файлом и т. Д.

Спасибо.

1 Ответ

2 голосов
/ 15 апреля 2019

Насколько я могу судить, предоставленный вами образец не отформатирован, если я пытаюсь декодировать только первую часть:

my_json = '{"total_count": 3, "incomplete_results": "False", "items": c "site_admin": False}'

и пытаюсь разобрать его, я получаю:

import json

json.loads(my_json, encoding='utf-8-sig')

>>> JSONDecodeError: Expecting value: line 1 column 60 (char 59)

, что относится к этим c пропущенным кавычкам, тогда Если я исправлю это:

my_json = '{"total_count": 3, "incomplete_results": "False", "items": "c" "site_admin": False}'
print(json.loads(my_json, encoding='utf-8-sig'))

>>> JSONDecodeError: Expecting ',' delimiter: line 1 column 64 (char 63)

, которое относится к пропущенному , после items ключа.После исправления:

my_json = '{"total_count": 3, "incomplete_results": "False", "items": "c", "site_admin": False}'
print(json.loads(my_json, encoding='utf-8-sig'))

>>> JSONDecodeError: Expecting value: line 1 column 79 (char 78)

, который относится к последнему False.Это можно исправить с помощью false или "False", в зависимости от типа, который вы хотите обработать.Но, учитывая, что ваш первый False рассматривается как строка:

my_json = '{"total_count": 3, "incomplete_results": "False", "items": "c", "site_admin": "False"}'
print(json.loads(my_json, encoding='utf-8-sig'))

>>> {'items': 'c', 'total_count': 3, 'site_admin': 'False', 'incomplete_results': 'False'}

И, наконец, он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...