Python中的dictionary与JSON有什么区别?

本文探讨了Python字典与JSON在数据结构、语法规则、适用场景及相互转换中的区别,强调了字典作为数据结构的特性与JSON作为传输格式的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中的dictionary与JSON有什么区别?


转载理由

日常编程中经常使用到Python的字典与JSON,那它们有什么区别于联系,以便能更加顺手地使用它们。本文对其做了较详细的说明。


工作中和其他语言的工程师交流,合作与联调中经常会涉及到数据的传输,这个数据的传输通常为json字符串,这个json格式数据和python自身的dict数据对象非常像,所以很自然的会思考这两者究竟区别在哪里?

首先,两者不一样

区别

Python 的字典是一种数据结构,JSON 是一种数据格式。

json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。

Python的字典key可以是任意可hash对象,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”}

联系

dict 存在于内存中,可以被序列化成 json 格式的数据(string),之后这些数据就可以传输或者存储了。
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 的实现,一套从存储到提取都封装好了的方案。

转载自

https://www.jianshu.com/p/87dbf4024cde

### Python 字典 JSON 的关系 在 Python 中,字典(dictionary)是一种用于存储键值对的数据结构。JSON(JavaScript Object Notation),作为一种轻量级的数据交换格式,在语法上非常类似于 Python 的字典表示方式。不过两者存在本质区别JSON 是一种独立于编程语言的纯文本数据格式,而 Python 字典则是特定于 Python 编程环境下的内置数据类型。 #### 转换方法 为了实现二者间的互转,Python 提供了一个名为 `json` 的标准库,它包含了两个核心函数: - **将字典转换为 JSON** 当需要将 Python 字典转化为 JSON 格式的字符串时,可以调用 `json.dumps()` 函数[^1]。该函数接受一个 Python 对象作为输入,并返回其对应的 JSON 表达形式。此外,还可以通过设置额外参数如 `indent` `ensure_ascii` 来控制输出样式字符编码等问题[^3]。 ```python import json data_dict = {"name": "Alice", "age": 25} json_str = json.dumps(data_dict, indent=4) print(json_str) ``` 这段代码会打印出如下格式化的 JSON 字符串: ```json { "name": "Alice", "age": 25 } ``` - **将 JSON 转换回字典** 如果拥有一个有效的 JSON 字符串并希望将其解析为 Python 字典,则应使用 `json.loads()` 方法[^2]。这个过程称为反序列化或解码,能够把接收到的 JSON 数据还原成易于操作的 Python 结构。 ```python json_string = '{"name": "Bob", "age": 30}' parsed_data = json.loads(json_string) print(parsed_data["name"]) # 输出 Bob ``` #### 区别应用场景 尽管看起来相似,但是 Python 字典 JSON 各自适用于不同的场景: - **Python 字典** 主要在程序内部用来高效地管理访问关联数组;支持任意不可变类型的键,不限制于字符串。 - **JSON** 更多地扮演着跨平台通信的角色,特别是在 Web API 请求/响应中广泛采用。因为它的设计初衷就是为了便于不同系统间传递信息,所以只允许有限几种基本数据类型(比如对象、数组、数值、布尔值等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值