Python学习笔记——字典和JSON的区别

参考链接:
https://www.jianshu.com/p/87dbf4024cde
https://www.zhihu.com/question/21097237
https://blog.csdn.net/xiongchengluo1129/article/details/78779418
https://www.jianshu.com/p/ee25e2b94eb8

JSON的含义

JSON(Javascript Object Notation)字面意思是Javascript对象表示法,指的是类似于Javascript对象的一种数据格式对象,是一种表现方式。目前这种数据格式比较流行,逐渐替换掉了传统的XML数据格式(JSON比XML更小、更快、更易解析),前端使用AJAX的时候后台返回该前端的数据格式就是JSON格式的。

Python字典和JSON的区别

  • Python字典是一种数据结构,JSON是一种数据传输格式。Python字典的字符串表现形式的规则看上去和JSON类似,但是字典本身是一个完整的数据结构,是Python对Hash Table的实现,一套从存储到提取都封装好了的方案,它使用其内置的哈希函数来规划键对应的内容的储存位置,从而获得O(1)的数据读取速度,即实现了一切自身该有的算法;而JSON是一个根据某种约定格式编写的纯字符串/纯文本,不具备任何数据结构的特征,无法直接操作。因此,Python字典的类型是字典JSON的类型是字符串。例如,一个JSON是str1 = ‘{“a”:1}’,即str1这个变量是一个符合JSON格式的字符串。
  • Python字典的键key或者值value的边界符号(若是字符串)可用单引号或者双引号,JSON强制必须使用双引号作为键key或者值value的边界符号(值value如果是数字可以不加双引号,但是键key只能是双引号引起来的字符串)。
  • Python字典的键key可以是任意可hash对象(hashable)(所有不可变类型都是可哈希的),JSON的键key只能是字符串。比如,{(1,2):1} 在Python里是合法的,因为tuple是hashable type,{[1,2]:1} 在Python里会出现TypeError: unhashable “list”。
  • Python字典的键key不可以重复,JSON的键key可以重复
  • Python字典的键key默认没有默认值,JSON任意键key存在默认值undefined
  • Python字典的值value没有任何限制,可以是任意Python对象(包括首字母大写的布尔值True和False、空值None),JSON的值value只能是字符串、浮点数、小写的布尔值true和false(对应Python的True和False)、空值null(对应Python的None),或者它们JSON所构成的数组或者对象。
  • Python字典里可以嵌套tuple,JSON里只有数组array。比如,在json_str = json.dumps(py_dict)方法里,json.dumps({1:2}) 的结果是{“1”:2},json.dumps((1,2)) 的结果是[1,2]。
  • JSON中文必须是Unicode编码(UTF-8代表8位一组表示Unicode字符的格式,即UTF-8是Unicode的实现方式之一)。比如,Python字典里{“me”: “我”}是合法的,JSON里必须是{“me”: “\u6211”}。
    在这里插入图片描述

Python字典和JSON的联系

Python字典存在于内存中,可以被序列化成JSON格式的字符串数据,之后这些数据就可以传输或者存储了。也就是说,这些字符串数据以JSON数据传输格式来传输,这种JSON格式能被解析成Python字典或者其他形式,但解析成什么内容,甚至是否解析,是否储存,都和JSON格式无关。例如,某段Python程序可以把JSON格式的字符串 “{A:1, B:2}” 解析成一对tuple( (“A”, 1), (“B”, 2) )而不是字典{“A”: 1, “B”: 2}。

Python字典和JSON相互转换的方法

1、加载JSON格式数据为Python字典(string -> dict)

(1)json.loads()方法:用来读取字符串将JSON格式的字符串转换为Python字典。示例如下:

# json.loads()直接读取字符串并转换
py_dict = json.loads(json_str)

# 在将文件打开后用read()读取文件返回字符串,再用json.loads()读取字符串并转换
with open('data.json', 'r') as f:
    json_str = f.read()
    py_dict = json.loads(json_str)

(2)json.load()方法:用来读取文件打开JSON文件并将里面的JSON格式的字符串转换为Python字典。示例如下:

with open('data.json', 'r') as f:
     py_dict = json.load(f)

2、将Python字典以JSON格式保存(dict -> string)

(1)json.dumps()方法将Python字典转换为JSON格式的字符串。示例如下:

json_str = json.dumps(py_dict)

(2)json.dump()方法:将Python字典转换为JSON格式的字符串,并写入JSON文件。示例如下:

with open('data.json', 'w') as f:
    json.dump(py_dict, f)

注意:Python 3已经将unicode作为默认编码,Python 3中将一个字典数据写入文件并保存为JSON时,查看JSON数据结果,会发现中文都被转换成unicode编码(字符串\uXXXX)。这是因为json.dumps()方法会将字典数据先转换为string,这个过程中会默认将字典数据中的中文以unicode编码方式输入到string,最后将string写入到文本中。如果不希望将中文转为unicode编码,需要在打开写入文件时加入encoding=“utf8”,且在dump方法中增加一个参数ensure_ascii=False。

with open('data.json', 'w', encoding = 'utf-8') as f:
    json.dump(py_dict, f, ensure_ascii=False)
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值