2015-04-28 79 views
4

我不明白爲什麼以下類型從str改爲unicode。爲什麼json.loads返回一個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']} 

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的情況下,我們看到在1的情況下,我們看到的字符串,而不是Unicode對象。 我看不到任何代碼更改發生在可導致此問題的兩個版本的python中。可能是我錯過了一些東西。 任何線索將不勝感激。 謝謝

回答

6

Python 2.7版有一個錯誤,導致您的第一個示例中的行爲。這在2.7.5中得到了修正。見issue 10038。請注意,版本2.6.6的行爲與2.7.5相同,表明2.7行爲與以前建立的行爲相比有所改變。

我不認爲任何代碼的變化發生在兩個版本的python可以導致這種情況。

當您可以檢查並確定時,無需「思考」任何改變!每一個Python發行版都附有大量的註釋,指明確切的變化。術語「json」在Python 2.7.5 change log中出現了二十八次。當然,也可以在Python 2.7.1,2.7.2,2.7.3和2.7.4中對JSON進行更改。

+0

其實,我的意思是,在json.loads()函數定義中沒有看到任何相關的代碼更改。可能是我錯過了一些東西。 – user3872776

相關問題