python学习笔记——json模块

本文介绍了Python的JSON模块,作为数据交换格式,JSON因其轻量级、易读写和跨平台特性广泛应用。文中详细讲解了JSON与Python类型转换的关系,如何使用json模块进行数据的序列化和反序列化,以及在处理bytes类型时的注意事项。
摘要由CSDN通过智能技术生成

上篇:https://blog.csdn.net/qq_42489308/article/details/89813925

json

Json是一种轻量级的数据交换格式。Json源自JavaScript语言,易于人类的阅读和编写,同时也易于机器解析和生成,是目前应用最广泛的数据交换格式。

Json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,对Python的类就无能为力。JSON格式和Python中的字典非常像。但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。这是因为在别的语言中,双引号引起来的才是字符串,单引号引起来的是字符;Python程序员习惯性的在列表、元组或字典的最后一个元素的后面加个逗号,这在json中是不允许的,需要特别注意。

在Python中,很多场合是需要使用json的。比如socket通信中,你能直接发送一个列表给对方吗?显然是不行的,因为socket是基于bytes类型进行字节发送的。这时候就可以通过json将列表转换成字符串,再encode()成bytes类型,然后发送过去。

类型转换

将数据从Python转换到json格式,在数据类型上会有变化,如下表所示 :

Python                                  JSON
dict                                    object
list, tuple                             array
str                                     string
int, float, int- & float-derived Enums  number
True                                    true
False                                   false
None                                    null

使用方法

json模块的使用其实很简单,对于绝大多数场合下,我们只需要使用下面四个方法就可以了:

方法                  功能
json.dump(obj, fp)  将python数据类型转换并保存到json格式的文件内。
json.dumps(obj)     将python数据类型转换为json格式的字符串。
json.load(fp)       从json格式的文件中读取数据并转换为python的类型。
json.loads(s)       将json格式的字符串转换为python的类型。

案例

import json
s = 'json'
json.dump(s,open('json-1.txt','w'))
-------------------------------------
json-1.txt
json
-------------------------------------
json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
-------------------------------------
p = json.load(open('json-1.txt','r'))
print(p)
-------------------------------------
j = '["foo", {"bar": ["baz", null, 1.0, 2]}]'
p = json.loads(j)
["foo", {"bar": ["baz", null, 1.0, 2]}]

仔细观察四个方法的名称,很好记忆的,要转化成json就‘dump’,要从json转化成Python就‘load’;要根据字符串转化就加‘s’,要从文件进行转化就不加‘s’。

需要注意的是json模块不支持bytes类型,要先将bytes转换为str格式

import json
s = b'json'
k = json.dumps(s)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    k = json.dumps(b)
  File "C:\Python36\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\Python36\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Python36\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Python36\lib\json\encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'bytes' is not JSON serializable
k = json.dumps(b.decode())
k 
'"json"'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值