从JSON导入看起来像列表“[0448521958,+ 61434800915]”的字符串到Python并使其成为实际列表?

时间:2015-01-29 00:10:13

标签: python json list abstract-syntax-tree

我正在使用由开发中的应用程序发送的python从JSON文档中提取字符串。这个问题类似于其他一些问题,但由于加号,我在使用x = ast.literal_eval('[0448521958, +61439800915]')时遇到了麻烦。

我正在尝试将每个电话号码作为python列表中的字符串x,但我不知道该怎么做。我收到了这个错误:

raise ValueError('malformed string')
ValueError: malformed string

3 个答案:

答案 0 :(得分:2)

您的问题不是只是+

第一个数字以0开头,这是一个八进制数...它只支持0-7 ...但数字以8结尾(还有其他数字大于8)

但事实证明你的问题不止于此

您可以使用正则表达式修复加号

fixed_string = re.sub('\+(\d+)','\\1','[0445521757, +61439800915]')
ast.literal_eval(fixed_string)

我不知道你怎么能解决八进制数问题

答案 1 :(得分:1)

从技术上讲,字符串不是有效的JSON。如果要忽略+,可以在评估之前将其从文件或字符串中删除。如果要保留它,则必须用引号括起该值。

答案 2 :(得分:1)

我认为问题是ast.literal_eval试图将电话号码解释为数字而不是字符串。试试这个:

str = '[0448521958, +61439800915]'
str.strip('[]').split(', ')

结果:

['0448521958', '+61439800915']