我有一个数据s = u"[u'38', u'36', u'34', u'32']"
类型为 unicode 的数据我想将此数据作为简单的元素列表s= ['38','36','32']
,
我尝试使用 simplejson.loads 但它不能与 ('["s"]') 这种类型的 ('["s"]') 一起使用简单的 json string not ("['s']") 所以请任何朋友指导我解决这个问题
提前致谢
>>> import ast
>>> s = u"[u'38', u'36', u'34', u'32']"
>>> [ item.encode('ascii') for item in ast.literal_eval(s) ]
['38', '36', '34', '32']
如果ast
可用,您可以使用ast.literal_eval
.
那么问题是该字符串不是有效的 JSON 语法。它是有效的Python语法,但不是 JSON,原因有两个:
'38'
, 只允许双引号, "38"
.u"38"
,只允许使用隐式 Unicode 的裸字符串"38"
.您需要更改输入格式,或者使用可以处理 Python 字符串的东西。
您可以使用eval
, 它读取包含 Python 语法的字符串,但请注意,如果您接受任意输入,这是非常危险的,因为有人可以提供代码来执行。尽管如此,它仍然有效:
>>> eval(u"[u'38', u'36', u'34', u'32']")
[u'38', u'36', u'34', u'32']
编辑:khachik 的答案可能比 更好eval
,因为它不会评估任意 Python 代码,只能读取 Python 数据结构。
使用re
模块将您的字符串拆分为所需的元素。例如
re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")