我想要將json字符串轉換爲Python字典時遇到問題。我有串狀如何將json字符串轉換爲字典並在鍵中保存順序?
s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}
時,我喜歡寫東西
tags=json.loads(s)
我gtet字典,而是按鍵的順序並不像串一樣(它沒有名稱,價格......)。如何將json字符串轉換爲字典並在鍵中保存順序?
我想要將json字符串轉換爲Python字典時遇到問題。我有串狀如何將json字符串轉換爲字典並在鍵中保存順序?
s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}
時,我喜歡寫東西
tags=json.loads(s)
我gtet字典,而是按鍵的順序並不像串一樣(它沒有名稱,價格......)。如何將json字符串轉換爲字典並在鍵中保存順序?
OrderedDict
模塊這類詞典的保留元素的插入順序。
從Python文檔:
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
反序列化FP(一個.read() - 支撐包含 JSON文檔類文件對象),以Python對象。
如果FP的內容被與其他 比UTF-8的基於ASCII編碼的(例如拉丁-1),則必須 指定適當的編碼名稱。不是基於ASCII的編碼(例如UCS-2)不允許使用 ,應使用codecs.getreader(encoding)(fp)或 將其封裝爲簡單解碼爲unicode對象並傳遞給loads()。
object_hook是一個可選函數,將使用任何對象字面解碼(字典)的 結果調用。將使用返回值 object_hook而不是字典。這個特性可以用 來實現自定義解碼器(例如JSON-RPC類提示)。
object_pairs_hook是一個可選函數,它將與 的任何對象文本的結果一起使用有序列對進行解碼。 將使用object_pairs_hook的返回值代替 字典。此功能可用於實現自定義解碼器,這些解碼器依賴於密鑰和值對解碼的順序(例如, collections.OrderedDict()將記住插入的順序)。如果還定義了 object_hook,則object_pairs_hook優先。
我想你可以使用object_pairs_hook參數與collections.OrderedDict()
tags=json.loads(s, object_pairs_hook=collections.OrderedDict)
Python字典是無序的,因爲通常你訪問的條目*者皆*這是很好的,如果你有遍歷元素時,訂單通常並不重要。順便說一句,'s'既不是字符串,也不是字典,如果它是一個字符串,則無效。它看起來像是在一個不同的結構之後,比如一組對象:'[{「name」:「...」,「price」:「...」},...]'。如果你提供了一些解釋*爲什麼*你需要按順序鍵並提供一個正確的例子,那麼我們可以幫助你更好。 – 2012-04-18 09:51:30
在'dict'中並沒有真正的「按鍵順序」這樣的事情。你可以一次迭代它們,但是不能控制你得到它們的順序。 – 2012-04-18 10:05:39
我認爲[this previous](http:// stackoverflow。com/questions/6921699/can-i-get -json-to-load-into-an-ordereddict-in-python)Stackoverflow的問題提供了一個答案。 – Alvin 2012-04-18 10:06:43