2014-02-01 4 views
0

У меня есть следующие JSON:SimpleJSON вопрос кодирования: недопустимый символ

{"StationRow":[{"Title":"XXX"},X{"Thumbnail":"http://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/6.jpg"},{"LinkCode":"http://www.youtube.com/watch?v=J4bw4y3h69I http://www.youtube-nocookie.com/embed/J4bw4y3h69I?rel=0"},{"SourceType":"embed"},{"LinkURL":"http://www.youtube.com/watch?v=J4bw4y3h69I"},{"Title":"ΚΛΕΜΜΕΝΑ ΟΝΕΙΡA"},{"Description":"XXXX."},{"Thumbnail":"http://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/14.jpg"},{"LinkCode":"ΚΛΕΜΜΕΝΑ ΟΝΕΙΡΑ - ΕΠ. 293 ΑΠΟΣΠΑΣΜΑ, http://www.youtube.com/watch?v=wSrhamIIaR4, http://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/17.jpg, ΚΛΕΜΜΕΝΑ ΟΝΕΙΡΑ - ΕΠ. 292 ΑΠΟΣΠΑΣΜΑ, http://www.youtube.com/watch?v=jxxhttp://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/16.jpg, ΚΛΕΜΜΕΝΑ ΟΝΕΙΡΑ - ΕΠ. 291 ΑΠΟΣΠΑΣΜΑ, http://www.youtube.com/watch?v=xx, http://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/15.jpg, xx ΟΝΕΙΡΑ - ΕΠ. 290 ΑΠΟΣΠΑΣΜΑ, http://www.youtube.com/watch?v=ILcwh7tMJ2Y, http://exampletv.com/shopping/Portals/10/PropertyAgent/757/Images/14.jpg, "},{"SourceType":"embed"},{"LinkURL":""}]} 

Об использовании simplejson он бросает следующее исключение:

NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS! 
              Error Type: <class 'simplejson.scanner.JSONDecodeError'> 
              Error Contents: Invalid control character 'h' at: line 1 column 260 (char 259) 
              Traceback (most recent call last): 

JSONLint называет его ValidJSON

Как понять это ?

Я использую Python 2.6 поставляется с XBMC

+0

Это JSON (скопировать и вставить) обрабатывается в порядке с использованием библиотеки JSON в Python 2.7 и 3.3 (который является basicilly simplejson). – Thayne

+0

так ли эта версия проблема? – Volatil3

+0

Глядя на заявление об ошибке, похоже, что у вас может быть непечатаемый управляющий символ на вашем входе. Это не в JSON, который вы опубликовали, но может быть в вашем исходном тексте. Первое, что я хотел бы сделать, - открыть JSON в текстовом редакторе, который может показать вам все контрольные символы, и посмотреть, есть ли он, либо удалить его, либо избежать его. – Thayne

ответ

3

Сохранить в JSON text.json и введите это на терминале приложение:

cat text.json | od -c 

Он будет производить что-то вроде этого:

0000000 { " S t a t i o n R o w " : [ { 
0000020 " T i t l e " : " Σ ** Υ ** Ν ** Τ 
0000040 ** Α ** Γ ** Ε ** Σ **  Ε ** Λ ** Λ ** 
0000060 Η ** Ν ** Ι ** Κ ** Ε ** Σ ** " } , { 
0000100 " D e s c r i p t i o n " : " Σ 
0000120 ** Υ ** Ν ** Τ ** Α ** Γ ** Ε ** Σ **  

Затем вы можете перейти на позицию 259 и посмотреть, что происходит.

+0

Amazing. Является ли каждый столбец одинаковым столбцом #, как указано в ошибке? в строке я нахожу колонку меньше 2o? – Volatil3

+0

Я думаю, что вывод из od меняет столбцы на его форматирование. Я думаю, что лучше попытаться найти строки после или до исходного положения символа файла. – Auro

+0

Я сделал, просто выполнив 'mystring [positionIndex]' – Volatil3

0

Возможно, вы захотите попробовать другой подход, то есть удалить все непечатаемые символы из строки. Модифицированный из Stripping non printable characters from a string in python:

import re 

def remove_control_chars(s): 
    control_chars = ''.join(map(unichr, range(0,32) + range(127,160))) 
    control_char_re = re.compile('[%s]' % re.escape(control_chars)) 

    return control_char_re.sub('', s) 

cleaned_json = remove_control_chars(original_json) 
obj = simplejson.loads(cleaned_json) 

 Смежные вопросы

  • Нет связанных вопросов^_^