正在将字符串从Python3转换为dict



如何将下面的字符串从Python3转换为Json

这是我的代码:

import ast
mystr = b'[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]'
chunk = str(mystr)
chunk = ast.literal_eval(chunk)
print(chunk)

Python2运行我得到:

[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]

Python3运行我得到:

b'[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]'

如何从Python3运行并获得与Python2相同的结果?

您在mystr中拥有的是bytes格式,只需将decode转换为ascii,然后对其进行评估:

>>> ast.literal_eval(mystr.decode('ascii'))
[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]

或者在更一般的情况下,为了避免Unicode字符的问题,

>>> ast.literal_eval(mystr.decode('utf-8'))
[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]

由于,默认解码方案是utf-8,您可以从中看到

>>> help(mystr.decode)
Help on built-in function decode:
decode(...) method of builtins.bytes instance
    B.decode(encoding='utf-8', errors='strict') -> str
...

然后,您不必指定编码方案:

>>> ast.literal_eval(mystr.decode())
[{'1459161763632': 'this_is_a_test'}, {'1459505002853': "{'hello': 12345}"}, {'1459505708472': "{'world': 98765}"}]

铁拳打败了我。为了扩展他的答案,字符串上的前缀"b"表示(对python3而不是python2)文字应该被解释为字节序列,而不是字符串。

结果是需要.decode方法将字节转换回字符串。Python2没有在字节和字符串之间进行这种区分,因此存在差异。

查看';b';字符串文字前面的字符做什么?了解更多信息。

最新更新