При чтении файла с помощью Python 2.7 он преобразует большинство строк в строки Unicode, что говорит о том, что, возможно, следующее изменение может иметь значение в вашем мире Python 3.2:
with open('foobar.json', encoding='utf-8') as foo:
bar = json.load(foo)
# or
bar = json.loads(foo.read())
Обнаружить нарушающую линию
Если вышеперечисленное не работает, вам нужно найти оскорбительный код json. Один из способов сделать это — просто удалить половину файла и повторить попытку. Если это все еще не удается, продолжайте удалять половину файла.
Если это работает, замените файл неисправной частью и снова начните удаление половинок. После нескольких попыток вы сможете найти проблемную часть файла или определить, есть ли у вас базовая ошибка чтения.
Чтобы устранить ошибки чтения, вы можете попробовать выполнить print('file: {}'.format(foo.read()))
перед вызовом json.loads()
, просто чтобы проверить прочитанное содержимое.
Протестируйте встроенный json
Другой тест, который вы можете попробовать для дальнейшего устранения источников ошибок, состоит в том, чтобы взять одну или несколько записей, вставленных в строку, и проверить, является ли это обработкой файла или обработкой json, которая дает вам ошибку. Что-то похожее на следующее:
json_text= '''
{ "FH45 G34":
{
"surname": "Foo",
"firstName": "Bar",
"address": "1275 Real Street, FooBar",
"postCode": "Foo Bar",
"county": "FooBar"
}
}'''
parsed = json.loads(json_text)
И вы также можете проверить, не происходит ли это из-за пробела в ключе первой записи. Другими словами, удалите пробелы из ошибочной записи, прежде всего в значениях левого ключа.
Если эти тесты в порядке, у вас есть проблемы с чтением вашего файла. Если они терпят неудачу, у вас есть проблема с модулем json.
person
holroy
schedule
12.10.2015
with open("foobar.json", "r") as foo: bar = json.loads(foo.read())
- person Casimir Crystal   schedule 12.10.2015json.load
следует просто прочитать сам файл, а затем преобразовать. - person Paul Clavier   schedule 12.10.2015with open("foobar.json", "r") as foo: bar = json.loads(foo.read())
, он отлично работает на Python 3.5. Может быть, эта проблема связана с Python 3.2? - person Casimir Crystal   schedule 12.10.2015