JSON(JavaScript Object Notation,JavaScript对象表示法)是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写。JSON是一种常用的数据格式,比如对接各种第三方API接口,大部分都是用JSON格式,当然也有一少部分用别的格式,比如XML格式。
python3 中使用 json 模块来对 JSON 数据进行编解码,将Python对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Python对象,json模块使用也比较简单(JSON标准类型这里不做介绍,如果不了解可以自己先学习一下,很简单的啊),这里主要介绍开发中用到最多的两个函数:
json.dumps()和json.loads()
1. json.dumps()
json.dumps(obj): 主要功能是将Python对象编码成JSON字符串。通过这个方法可以将字典、元组、列表等数据类型转换为JSON格式的字符串,通常对应关下如下:
我们来实战一下这个函数的使用:
import json
data = {
'name': '骑着蜗牛百米冲洗',
'age': 99,
'sex': '男',
'language': ['Python', 'java']
}
json_string = json.dumps(data)
print(json_string)
看一下程序运行结果:
我们发现中文的输出方式一点都不友好,其实这是编码导致的,我们只需要修改一下函数的一个参数即可。修改后的代码如下:
import json
data = {
'name': '骑着蜗牛百米冲洗',
'age': 99,
'sex': '男',
'language': ['Python', 'java']
}
json_string = json.dumps(data, ensure_ascii=False)
print(json_string)
在来看一下程序运行结果:
其实dumps函数还有很多参数,我们这里在来看一个参数,这个参数的作用就是格式化json的输出,让我们看起来更加美观。这个参数就是indent=4, 4 表示每一层级的 JSON 内容都会缩进 4 个空格, 如果不设置该参数(默认为 None),输出的 JSON 字符串会是紧凑的一行,没有换行和缩进。
import json
data = {
'name': '骑着蜗牛百米冲洗',
'age': 99,
'sex': '男',
'language': ['Python', 'java']
}
json_string = json.dumps(data, indent=4, ensure_ascii=False)
print(json_string)
在来看一下效果
是不是看起来美观漂亮多了。转换成python的字典对象后,就可以使用对象的各种方法了,比如取值就可以用字典的方法进行取值了,之前的文章中已经详细的介绍过字典的用法。这里不带详细介绍,只是简单举个例子:
#两种取值方式
print(data.get('name'))
print(data["name"])
输出结果是一样的:
虽然结果是一样的,但是这两种方式还是有点区别的,就是通过["name"]这种方式获取值时,如果name不存在就会报一个异常信息KeyError,我们具体来看一下实例:
print(data["name1"])
我们改成一个name1,这个值在字典中是不存在的,看一下解雇哦是不是会报KeyError。
确实和我们想的一样,报了KeyError错误。
2. json.loads(s):
将JSON格式的字符串解码为Python对象。
来看一下具体的用法
import json
json_string = '{"name": "骑着蜗牛百米冲刺", "age": 99, "sex": "男", "language": ["Python", "java"]}'
data = json.loads(json_string)
print(data)
# 打印数据类型
print(type(data))
程序运行结果:
我们可以看出把我们json格式字符串转换成了字典对象。我们在来看一下json数组格式转换成python的什么对象。
import json
json_string = '{"name": "骑着蜗牛百米冲刺", "age": 99, "sex": "男", "language": ["Python", "java"]}'
data = json.loads(json_string)
print(data)
# 打印数据类型
print(type(data))
程序运行结果:、
我们发现json的数组格式字符串转换成了python的列表对象。这样取值就可以用列表的方法进行取值了,之前的文章中已经详细的介绍过列表的用法。这里不带详细介绍,只是简单举个例子:
print(data[0])
结果为:
需要注意的是列表获取元素的下标是从0开始的。