2012-03-13 3 views
0

проблемы Спроецироватьпитона из строки

import simplejson as json 
a = u"[(datetime.datetime(2012, 3, 13, 14, 50, 13, 996833), 'ACTIVE', [u'my.test.service', '{}'])]" 
json.loads(a) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/simplejson/__init__.py", line 384, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 402, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/usr/lib/python2.7/dist-packages/simplejson/decoder.py", line 418, in raw_decode 
    obj, end = self.scan_once(s, idx) 
simplejson.decoder.JSONDecodeError: Expecting object: line 1 column 1 (char 1) 

Вопрос очевиден: Как я могу преобразовать свою строку в список?

+1

Умм ... Я не считаю проблему самоочевидной ... – CoffeeRain

+1

Является ли эта строка действительной JSON? –

ответ

2

Вы не можете. (datetime.datetime (2012, 3, 13, 14, 50, 13, 996833) не имеет никакого значения в JSON И наоборот, если вы пытаетесь сделать наоборот, вы заметите проблему:.

json.dumps([(datetime.datetime(2012, 3, 13, 14, 50, 13, 996833), 'ACTIVE' [u'my.test.service', '{}'])]) 

TypeError: datetime.datetime(2012, 3, 13, 14, 50, 13, 996833) is not JSON serializable 

Edit:

на самом деле, читая ваш вопрос снова заставил меня заметил, что вы не указали вы хотите использовать JSON, просто «преобразовать строку в список» не уверен, что ваш случай использования, но это будет работать. в вашем случае:

In [23]: a = "[(datetime.datetime(2012, 3, 13, 14, 50, 13, 996833), 'ACTIVE', [u'my.test.service', '{}'])]" 
In [24]: eval(a) 
Out[24]: [(datetime.datetime(2012, 3, 13, 14, 50, 13, 996833), 'ACTIVE', [u'my.test.service', '{}'])] 
-1

Первый символ, когда вы назначаете a, является «u», но без кавычек. Попробуйте удалить это и посмотреть, как это происходит:

import simplejson as json 
a = "[(datetime.datetime(2012, 3, 13, 14, 50, 13, 996833), 'ACTIVE', [u'my.test.service', '{}'])]" 
json.loads(a) 
+1

Вы попробовали сами? Также попробуйте 'type (u" string ")'. – bereal

0

Вы не можете использовать функцию внутри своего кода. Вам нужно вырвать datetime() из потока JSON или поместить его в нужном формате. Попробуйте сначала разобрать известный код JSON.

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