2013-05-02 69 views
1

我JSON結果解碼編碼的JSON結果在python

{ 「sUrlRedirect」: 「HTTP://dez.loc/registration」, 「sMsgTitle」:空, 「SMSG」:「\ u041f \ u043e \ u0437 \ u0434 \ u0440 \ u0430 \ u0432 \ u043b \ u044f \ u0435 \ u043c! \ u0420 \ u0435 \ u0433 \ u0438 \ u0441 \ u0442 \ u0440 \ u0430 \ u0446 \ u0438 \ u044f \ u043f \ u0440 \ u043e \ u0448 \ u043b \ u0430 \ u0443 \ u0441 \ u043f \ u0435 \ u0448 \ u043d \ u043e」, 「bStateError」:假}

我怎樣才能在Python進行解碼。結果必須是這樣的

{ 「sUrlRedirect」: 「HTTP://dez.loc/registration」, 「sMsgTitle」:空, 「SMSG」: 「Поздравляем Регистрацияпрошлауспешно」,「bStateError 「:假}

謝謝...

UPD

我能做到這一點,而無需使用json模塊?

+1

嘗試閱讀本:http://stackoverflow.com/questions/990169/how-do-convert-unicode-escape-sequences-to-unicode-characters-in-a-python-string – dave 2013-05-02 19:29:40

+0

@戴夫:這不會很好。這個問題不是解碼轉義序列,而是整個JSON文檔。 JSON轉義序列是一小部分,它們與Python的轉義序列不兼容(由於UTF-16的怪異)。 – 2013-05-02 19:34:35

+0

爲什麼你不想使用'json'模塊呢?這就像要求如何計算沒有計算器或幻燈片規則的平方根。當然,你可以用手工做,但它會一直持續下去。 – 2013-05-02 19:39:41

回答

4

只需使用內置的蟒蛇json模塊加載JSON作爲Python對象,你會但是看到你的unicode字符串表示爲「\ u041f」,當你在使用它們你的應用程序,它應該顯示爲俄文文本。

>>> json_str= '{"sUrlRedirect":"http://dez.loc/registration","sMsgTitle":null,"sMsg":"\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c! \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e","bStateError":false}' 
>>> import json 
>>> the_dict = json.loads(json_str) 
>>> the_dict 
{u'sMsgTitle': None, u'bStateError': False, u'sMsg': u'\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c! \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e', u'sUrlRedirect': u'http://dez.loc/registration'} 

>>> print the_dict['sMsg'] 
Поздравляем! Регистрация прошла успешно 
+0

我可以不使用'json'模塊嗎? – 2013-05-02 19:36:40

+0

您可以改用simplejson;) – Andbdrew 2013-05-02 19:38:10

+0

或者,如果您手上有太多時間,則可以實現基於http://www.json.org/的完整語法分析器 – Lethargy 2013-05-02 19:40:04

2

使用json module

In [1]: import json 

In [2]: s = '''{"sUrlRedirect":"http://dez.loc/registration","sMsgTitle":null,"sMsg":"\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c! \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e","bStateError":false}''' 

In [3]: json.loads(s) 
Out[3]: 
{u'bStateError': False, 
u'sMsg': u'\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c! \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e', 
u'sMsgTitle': None, 
u'sUrlRedirect': u'http://dez.loc/registration'} 

In [4]: for k, v in json.loads(s).iteritems(): 
      print k, v 
    ...:  
sMsgTitle None 
bStateError False 
sMsg Поздравляем! Регистрация прошла успешно 
sUrlRedirect http://dez.loc/registration 

In [5]: print repr(json.loads(s)).decode("unicode-escape") 
{u'sMsgTitle': None, u'bStateError': False, u'sMsg': u'Поздравляем! Регистрация прошла успешно', u'sUrlRedirect': u'http://dez.loc/registration'} 
+0

我可以做到這一點,而不使用'json'模塊? – 2013-05-02 19:37:36

+0

如果你願意編寫你自己的解析器......我想不出爲什麼你應該這樣做。 – root 2013-05-02 19:39:57