Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [Python]Ошибка при загрузке JSON  (Прочитано 8002 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bahbahkadirov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
[Python]Ошибка при загрузке JSON
« : 15 Июля 2013, 11:49:13 »
Итак, задача состоит в следующем: загрузить JSON файл в питоне.
Сам в питоне новичек, поэтому олазил все и вся, даже находил решения, которые помогали кому-то, но со мной все безуспешно...

Сначала пытался просто загружать:
import json   
f = open('testset','r')
data = json.load(f)

От чего получал ошибку
Traceback (most recent call last):
File "/Users/--/PycharmProjects/First/main.py", line 7, in <module>
data = json.load(f)
File     "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 271, in load
return loads(fp.read(),
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 537: ordinal not in range(128)

После изучения вопроса код был немного изменен и получено следующее:

# -*- coding: utf-8 -*-
import json
f = open('testset','r',encoding='utf-8')
data = json.load(f)

Компиляция которого выдавала ошибку
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 368, in raw_decode
    obj, end = self.scan_once(s, idx)
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/--/PycharmProjects/First/main.py", line 6, in <module>
    data = json.load(f)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 274, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 370, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Так же для интереса была получена строка в позициях 527-547:

print (open('testset','rb').read()[527:547])
b'"categs":"\xd0\x94\xd0\xb5\xd0\xba\xd0\xbe\xd1\x80'Что указывает на проблему с русским языком (насколько я понял из прочитанных материалов), добавив codecs, получил нормальную строку:
print (codecs.open('testset','rb', "utf-8").read()[527:547])"categs":"Декоративн
В случае использования подхода с codecs
# -*- coding: utf-8 -*-
import codecs
import json
f = codecs.open('testset','rb', "utf-8")
data = json.load(f)
Получаем ту же ошибку, что и с параметром encoding= в open
ValueError: No JSON object could be decoded
Уже около недели мучаюсь с этим и не могу приступить к следующему этапу работы, потому что тупо не могу открыть файл  :-\
Версия Питона - 3.3. Пробовал так же и на 2.7 - там тоже не грузится, но еще и описание ошибок более скудное.
« Последнее редактирование: 15 Июля 2013, 12:14:21 от bahbahkadirov »

Оффлайн llenchikk

  • Активист
  • *
  • Сообщений: 420
    • Просмотр профиля
    • sms.ru
Re: [Python]Ошибка при загрузке JSON
« Ответ #1 : 15 Июля 2013, 18:02:24 »
Может исходный файл - не валидный JSON?
Попробуйте сначала валидный JSON открыть.

Оффлайн buanev

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [Python]Ошибка при загрузке JSON
« Ответ #2 : 03 Сентября 2013, 11:47:37 »
Похожая ошибка при запуске relinux. Частично помогло вот http://omatic-hacker.org.ua/2013/03/26/python3utf8unix/

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Но там не Ubuntu и не знаю чем заменить ккоманды:

setenv LC_ALL en_US.UTF-8
setenv LANG en_US.UTF-8

/etc/csh.cshrc


Потому что после перезагрузки все начинается снова. Кто знает помогите.
« Последнее редактирование: 03 Сентября 2013, 13:16:42 от buanev »

 

Страница сгенерирована за 0.09 секунд. Запросов: 25.