我无法理解为什么以下类型会从str。
更改为unicodeCASE1
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中发生了任何代码更改,这可能导致这种情况。可能是我错过了什么。 任何线索将不胜感激。 感谢
答案 0 :(得分:6)
Python 2.7版有一个错误导致了第一个例子中的行为。这在2.7.5中得到修复。见issue 10038。请注意,版本2.6.6的行为类似于2.7.5,表明2.7行为是对先前建立的行为的改变。
我不认为在两个版本的python中发生任何代码更改都可能导致此问题。
当您可以检查并确定时,无需“思考”任何改变! Python的每个版本都附带了大量的注释,指出了确切的变化。在Python 2.7.5 change log中,术语“json”出现了28次。当然,也可以在Python 2.7.1,2.7.2,2.7.3和2.7.4中对JSON进行更改。