如何将下面的字符串从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';字符串文字前面的字符做什么?了解更多信息。