python – 为什么json.loads返回一个unicode对象而不是字符串

我无法理解为什么以下类型从str更改为unicode.

情况1

Python 2.7 (r27:82500, Nov 19 2014, 18:07:42)
[GCC 4.5.1 20100924 (Red Hat 4.5.1-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> x = {'resources': {}, 'tags': ['a', 'b']}  
>>> ret = json.dumps( x )
>>> ret
'{"resources": {}, "tags": ["a", "b"]}'
>>>
>>> type( ret )
<type 'str'>
>>> ret2 = json.loads( ret )
>>> ret2
{'resources': {}, 'tags': ['a', 'b']}

CASE2

Python 2.7.5 (default, Apr 22 2015, 21:27:15) 
[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> x = {'resources': {}, 'tags': ['a', 'b']}  
>>> ret = json.dumps( x )
>>> ret
'{"resources": {}, "tags": ["a", "b"]}'
>>> type( x )
<type 'dict'>
>>> type( ret )
<type 'str'>
>>> ret2 = json.loads( ret )
>>> ret2
{u'resources': {}, u'tags': [u'a', u'b']}
>>> 

因此,在案例2中,我们看到unicode对象,就像在案例1中一样,我们看到了字符串.
我没有看到在两个版本的python中发生了任何代码更改,这可能导致这种情况.可能是我错过了什么.
任何线索将不胜感激.
谢谢

最佳答案
Python的2.7版本有一个错误导致第一个例子中的行为.这在2.7.5中得到修复.请参阅issue 10038.请注意,版本2.6.6的行为类似于2.7.5,表明2.7行为是对先前建立的行为的更改.

I don’t think that any code change has happened in the two version of python that can lead to this.

当你可以检查并确定时,不需要“思考”没有任何改变! Python的每个版本都附带了大量的注释,指出了确切的变化.在Python 2.7.5 change log中,术语“json”出现了二十八次.当然,在Python 2.7.1,2.7.2,2.7.3和2.7.4中也可以对JSON进行更改.

转载注明原文:python – 为什么json.loads返回一个unicode对象而不是字符串 - 代码日志