3

我有一个数据s = u"[u'38', u'36', u'34', u'32']"类型为 unicode 的数据我想将此数据作为简单的元素列表s= ['38','36','32']
我尝试使用 simplejson.loads 但它不能与 ('["s"]') 这种类型的 ('["s"]') 一起使用简单的 json string not ("['s']") 所以请任何朋友指导我解决这个问题

提前致谢

4

4 回答 4

9
>>> 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']
于 2011-04-13T11:51:34.187 回答
1

如果ast可用,您可以使用ast.literal_eval.

于 2011-04-13T11:53:41.780 回答
1

那么问题是该字符串不是有效的 JSON 语法。它是有效的Python语法,但不是 JSON,原因有两个:

  1. JSON 不允许单引号字符串, '38', 只允许双引号, "38".
  2. JSON 不允许在字符串 au 之前使用 au 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 数据结构。

于 2011-04-13T11:54:01.017 回答
0

使用re模块将您的字符串拆分为所需的元素。例如

re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")
于 2011-04-13T11:52:00.723 回答