標籤:

你覺得python的字典和json差不多嗎?


不一樣。

JSON 是一種數據傳輸格式,這一點在 JSON 官網上有明確的定義。也就是說,這些字元串以 JSON 這樣的格式來傳輸,至於你怎麼 parse 這些信息,甚至是是否 parse,是否儲存,都不是 JSON 的事情。

用 Python 舉個例子: 某段程序可以把字元串 "{A:1, B:2}" parse 成 一對 tuple ( ("A", 1), ("B", 2) ) 而不是 dictionary {"A": 1, "B": 2}。

Python 的 dictionary 是對 Hash Table 這一數據結構的一種實現。它使用其內置的哈希函數來規劃鍵對應的內容的儲存位置,從而獲得 O(1) 的數據讀取速度。

所以 JSON 是一種數據傳輸格式,它能被解析成 Python 的 Dictionary 或者其他形式,但解析成什麼內容是和 JSON 這種格式無關的。Python 的 Dictionary 則是 Python 對 Hash Table 的實現,一套從存儲到提取都封裝好了的方案。


我的理解是,json 就是一個根據某種約定格式編寫的純字元串,不具備任何數據結構的特徵。而 python 的字典的字元串表現形式的規則看上去和 json 類似,但是字典本身是一個完整的數據結構,實現了一切自身該有的演算法。


Python 的字典是一種數據結構,JSON 是一種數據格式。

當然數據格式里的東西也是有結構的,具體的解釋(重複 key 怎麼處理啦,key 區不區分大小寫啦,key 的順序重不重要啦,沒有寫小數部分的數可不可以解釋為整數啦等等)需要看使用者/解析器的約定。

JSON 的 key 只能是字元串,Python 的 dict 可以是任何可 hash 對象;

JSON 的 key 可以是有序的(不過 Python 3.6 里出現了插入序的字典);

JSON 的 key 可以重複;

JSON 的值只能是字元串、浮點數、布爾值或者 null,或者它們所構成的數組或者對象。


有一些區別,Python的字典key可以是任意可hash對象,json只能是字元串。


非常不一樣。

JSON表述的是JavaScript Object,全稱JavaScript Object Notation,是一種表現方式,寫成json是值只可為幾類固定的可序列化類型。js里object當key的必須是字元串,value任意,訪問方式可[]可.,遍歷方式分in分of,因為js里的array也是個特別的object(key為連續數字),二者不分家。json對任意key存在默認值undefined。

dict是個容器,key是任意hashable,value是任意引用,僅可下標訪問,跟list沒有任何共通性。dict默認情況下沒有默認值。

這就是為毛py里有專門的json模塊用來dump和load一個json。


形式上有些相像,但JSON是純文本的,無法直接操作。


有幾個不一樣:

1.python dict 字元串用單引號,

json強制規定雙引號。

2.python dict 里可以嵌套tuple,

json里只有array

json.dumps({1:2}) 的結果是 {"1":2}

json.dumps((1,2)) 的結果是[1,2]

3.json key name 必須是字元串,

python 是hashable,

{(1,2):1} 在python里是合法的,因為tuple是hashable type;

{[1,2]:1} 在python里TypeError: unhashable "list"

4.json: true false null

python:,True False None

5. python {"me": "我"} 是合法的

json 必須是 {"me": "u6211"}


jb jb講的很詳細了,除了一些json的強制要求(比如雙引號),基本形式上都一樣。當然了,本質肯定不一樣,不過用的時候就不用care這些了,easy。


在 python 中,dict 是一種數據結構,json 是一種數據格式。

dict 存在於內存中,可以被序列化成 json 格式的數據(string),之後這些數據就可以傳輸或者存儲了。


就是差不多啊,而且格式表示方式都像極了。


load就是字典,damp就是文件

反正我是把他當字典用


推薦閱讀:

TAG:Python | JSON |