字符串中的python列表

时间:2012-03-13 20:17:15

标签: python json list

问题是不言自明的:

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)

问题很明显:如何将我的字符串转换为列表?

3 个答案:

答案 0 :(得分: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

修改

实际上,再次阅读你的问题让我注意到你没有指定你想要使用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 :(得分:0)

您不能在代码中使用函数。您需要从JSON流中断出datetime(),或将其置于正确的格式中。尝试首先解析已知的JSON代码。

答案 2 :(得分:-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)