2010-03-06 55 views
2

我有以下情況,我得到UTF-8編碼的HTTP響應的結果。我想加載響應內容(JSON)。但是我不知道我爲什麼要做2 json.loads,使我得到了最後的名單:python json加載和unicode

result = urllib2.urlopen(req).read() 
print result, type(result) 
#=> "[{\"pk\": 66, \"model\": \"core.job\", \"fields\": {\"customer\": 1, \"created_ts\": \"2010-03-06 06:33:36\", \"log\": 66, \"process\": 1, \"ended_ts\": null, \"state\": \"PENDING\", \"started_ts\": null}}]" <type 'str'> 
ret = json.loads(result) 
print ret , type(ret) 
#=> [{"pk": 66, "model": "core.job", "fields": {"customer": 1, "created_ts": "2010-03-06 06:33:36", "log": 66, "process": 1, "ended_ts": null, "state": "PENDING", "started_ts": null}}] <type 'unicode'> 
ret = json.loads(ret) 
print ret , type(ret) 
#=>[{u'pk': 66, u'model': u'core.job', u'fields': {u'customer': 1, u'created_ts': u'2010-03-06 06:33:36', u'log': 66, u'process': 1, u'ended_ts': None, u'state': u'PENDING', u'started_ts': None}}] <type 'list'> 

任何想法?

回答

3

它看起來像JSON字符串的repr()是什麼是返回而不是JSON字符串本身。所以,服務器上的某些東西被破壞了。

+0

我怎樣才能確定你的假設? – khelll 2010-03-06 13:52:17

+0

如果您檢查原始字符串,您會注意到它在開頭和結尾都有引號,並且內部引號會被轉義。這不是JSON字符串應該看起來的樣子。您可以通過在JSON字符串上輸出repr()來複制結果。 – 2010-03-06 14:06:36