美文网首页
json和字典dict的区别?

json和字典dict的区别?

作者: Gakki0725 | 来源:发表于2021-07-03 11:13 被阅读0次
    作者:Gakki

    json和字典dict的区别?

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

     {
      "weibo": "https://weibo.com" ,
      "github": "https://github.com" ,
      "qq": {
        "number": "1236517",
        "email": "1236517@qq.com"
      }
    }
    

    从形式上来讲,都是 ” 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值。

    相关文章

      网友评论

          本文标题:json和字典dict的区别?

          本文链接:https://www.haomeiwen.com/subject/xduuultx.html