为什么json.loads返回Unicode对象而不是字符串

4
我不明白为什么下面的类型从str变成了Unicode。
CASE1
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']}

案例2

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']}
>>> 

所以,在第二种情况下,我们看到的是Unicode对象,而在第一种情况下,我们看到的是字符串。 我没有看到任何代码更改会导致这种情况。也许我错过了什么。 如果有任何线索,请告诉我。 谢谢
1个回答

6

Python 2.7版本存在一个错误,导致了你第一个示例中的行为。这个问题在2.7.5版本中得到了修复。请参见10038号问题。需要注意的是,2.6.6版本的行为类似于2.7.5,表明2.7版本的行为与先前已确立的行为不同。

我认为没有发生任何代码更改,可以导致这种情况。

当你可以检查并确定时,就没有必要“想”了!每个Python版本的发布都附带有详细说明,准确指出了发生了什么变化。术语“json”在Python 2.7.5 更新日志中出现了28次。当然,对JSON进行了更改也可能发生在Python 2.7.1、2.7.2、2.7.3和2.7.4中。


实际上,我的意思是,在json.loads()函数的定义中,我没有看到任何相关的代码更改。也许我错过了什么。 - user3872776

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接