1. 程式人生 > 其它 >json和字典dict的區別

json和字典dict的區別

json和字典dict的區別?

銀河有希子 2021.07.03 11:13:00字數 987閱讀 173
作者:Gakki

json和字典dict的區別?

字典寫法:
dict1 = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
JSON 寫法:

 {
  "weibo": "https://weibo.com" ,
  "github": "https://github.com" ,
  "qq": {
    "number": "1236517",
    "email": "[email protected]"
  }
}

從形式上來講,都是 ” Key: Value " 的形式儲存資料。
但從本質上來講:

  1. 字典是一種資料結構,而 JSON 是一種格式
  2. JSON 就是一個根據某種約定格式編寫的純字串,不具備任何資料結構特徵。而字典的字串表現形式的規則看上去和 JSON 類似,但字典本身是一個完整的資料結構,實現了一切自身該有的演算法
  3. 字典有很多內建函式,有多種呼叫方法, 而 JSON 是資料打包的一種格式,並不像字典具備操作性,並且是格式就會有一些形式上的限制,比如 JSON 的格式要求必須且只能使用雙引號作為 Key 或者 值 的邊界符,不能使用單引號,而且 ” Key “ 必須使用邊界符(雙引號),但字典就無所謂了,可以單引號、雙引號。
  4. JSON 的 Key 只能是字串,字典可以是任何可 hash 物件
  5. JSON 的 Key 可以是有序、重複的,字典的 key 不可重複
  6. JSON 的 Key 存在預設值 undefined,字典沒有預設值
  7. JSON 的 Value 只能是字串、浮點數、布林值或者null,或者它們構成的陣列或者物件
  8. JSON 可以是 " [] " 或者 點號(.) 來訪問巢狀的 JSON 物件(如:document.write(myObj.qq.email) 或者 document.write(myObj["qq"]["email"]);document.write(myObj.qq["email"]);),遍歷方式分 in 、 of ,dict 的 value 僅可以通過下邊 " [] " 訪問(如:dict1['Alice'])。
  9. JSON 裡只有陣列,字典可以巢狀元組
  10. JSON 中的中文必須是 Unicode 編碼,如“你好”在json中應為"\u4f60\u597d"。
  11. JSON 的資料型別是字串( str ),字典的資料型別是字典( dict )
  12. JSON 定義布林值和空值:true、false、null;Python 定義布林值和空值:True、False、None

聯絡:

  1. 字典存在於記憶體中,可以被序列化成 JSON 格式的資料( str ),之後這些資料就可以傳輸或者儲存了
  2. JSON 是一種資料傳輸格式。也就是說,這些字串以 JSON 這樣的格式來傳輸,至於你怎麼解析這些資訊,甚至是否解析,是否儲存,都不是 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 的實現,一套從儲存到提取都封裝好了的方案。
  • 相關知識:Hashtable
    一個物件當其宣告週期內的 hash 值不發生改變,並且可以跟其他物件進行比較時,這個物件就是 Hashtable的。
    1. Python 中的基本型別都是 Hashtable,如:字串(str)、數字( int、float)、元組tuple(只有當tuple內的所有項都是hashtable的時候,tuple才是hashtable)、集合set(set始終都是hashtable的,因為它們所有的專案都是被定義成hashtable的)等。
    2. 使用者自定義的型別預設都是 Hashtable,因為它們的hash值就是其id值。