05 - python操作JSON

本文介绍了JSON,一种轻量级的数据交换格式,常用于爬虫获取接口数据。讲解了JSON对象和数组的格式,以及Python中json模块的常用方法如dumps/dump将Python对象转为JSON字符串并保存,loads/load处理JSON字符串和文件的操作。
摘要由CSDN通过智能技术生成

JSON认识

JSON,一种轻量级的文本数据交换格式,比XML更小更快,更易解析,爬虫经常要获取接口数据,接口数据就是JSON格式的。

格式示例

# 格式1:JSON 对象
{"name": "李嘉图", "age": 18}

# 格式2:JSON 数组
{
    "student":
        [
            {"name": "李嘉图", "age": 18},
            {"name": "凯撒", "age": 18},
            {"name": "楚子航", "age": 18}
        ]
}

常用的JSON模块方法

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

带s的都是和字符串相关的,不带s的都是和文件相关的。

json.dumps()

将python数据类型转换为json格式的字符串

test_json.py

# 导入json模块
import json

# 创建person的人员字典
person = {"name": "李嘉图", "age": 18, "sex": "男"}
print(type(person))

# 将python对象转换为json字符串
jsonStr = json.dumps(person)
print(type(jsonStr))

输出结果

<class 'dict'>
<class 'str'>

格式化json,使方便阅读

# 导入json模块
import json

# 创建person的人员字典
person = {"name": "李嘉图", "age": 18, "sex": "男"}

# 将python对象转换为json字符串
jsonStr = json.dumps(person)
print(jsonStr)

# json字符串格式化
print(json.dumps(person, sort_keys=True, indent=4, separators=(',', ': ')))

输出结果

{"name": "\u674e\u5609\u56fe", "age": 18, "sex": "\u7537"}
{
    "age": 18,
    "name": "\u674e\u5609\u56fe",
    "sex": "\u7537"
}
  • sort_keys:是否排序
  • indent:定义缩进距离
  • separators:是一个元组,定义分隔符类型

将json字符串写入json文件

json_write.py

# 导入json模块
import json

# 创建person的人员字典
person = {"name": "李嘉图", "age": 18, "sex": "男"}

# 将python对象转换为json字符串
jsonStr = json.dumps(person, sort_keys=True, indent=4, separators=(',', ': '))

# 写入文件
with open('json_write.json', 'w', encoding='utf-8') as f:
    f.write(jsonStr)

运行程序

json.dump()

同样是将字符串存储到json格式的文件内,使用dump()不需要write()方法

# 导入json模块
import json

# 创建person的人员字典
person = {"name": "李嘉图", "age": 18, "sex": "男"}

# 将python对象转换为json字符串
json.dump(person, open('json_dump.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))

输出

直接写入文件用下面的方便点,但是如果在写入的过程中需要操作字符串的业务,就选上面那种。

json.loads()

# 导入json模块
import json

# 创建person的人员字典
person = {"name": "李嘉图", "age": 18, "sex": "男"}

# 将python对象转换为json字符串
jsonStr = json.dumps(person)
print(type(jsonStr))

# 将json字符串转换为python类型
python_type = json.loads(jsonStr)
print(python_type)
print(type(python_type))

输出结果

<class 'str'>
{'name': '李嘉图', 'age': 18, 'sex': '男'}
<class 'dict'>

在实际的业务中,获取到了接口的json数据,转换成python对象之后,就可以进行后续的业务操作。

读取json文件

# 导入json模块
import json

f = open('json_write.json')
json_str = f.read()
python_type = json.loads(json_str)
print(python_type)
print(type(python_type))

f.close()

输出

{'age': 18, 'name': '李嘉图', 'sex': '男'}
<class 'dict'>

json.load()

# 导入json模块
import json

python_type = json.load(open('json_write.json'))
print(python_type)
print(type(python_type))

输出

{'age': 18, 'name': '李嘉图', 'sex': '男'}
<class 'dict'>

两者不同之处,上面的传入的是json字符串,下面的传入的是文件对象。

json字符串解析

# 导入json模块
import json

# 将json文件中的json对象转换为python对象
python_type = json.load(open('json_write.json'))

# 解析python对象
print(python_type.keys())
print(python_type.values())
print(python_type["name"])
print(python_type["age"])
print(python_type["sex"])

输出结果

dict_keys(['age', 'name', 'sex'])
dict_values([18, '李嘉图', '男'])
李嘉图
18
男

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值