什么是JSON?
JSON是"JavaScript Object Notation"的简称,是一种数据交换格式
JSON格式
假设我们有一个对象,这个对象有两个属性:“name”跟“age”。
在JSON中是这样表达的:
{
"name":"男孩",
“age”:"19"
}
敢于想象的同学应该立马想到了,这种格式在Python中不就是字典么??
没错,可以简单理解为另类的字典,因为JSON的数据格式跟字典几乎一毛一样(对应文章标题了)
JSON使用键值对的方式来承载数据,每个键值对之间使用逗号隔开。
JSON键值对的数据类型
在JSON中键一定是一个字符串,必须用双引号括起来!!
而值的类型有七种:
字符串、数值、对象、数组、true、false、null
其中,数值类型可以使用科学计数法
例如:
JSON嵌套
在JSON中数据也可以嵌套,即一个JSON数据中可以嵌套N个数据,并且使用“[]”来区分。
(我去,这不就是Python中的列表吗???)
格式:
[元素1,元素2]
例如:
{
"name":"人",
"friend":["狗","猫","老鼠"],
"description":{
"age":"19",
"sex":"male"
}
}
在Python中解析JSON
在Python中对于JSON的解析,需要我们安装JSON库。
安装方法:
pip install json
对于JSON的解析主要有两种:
1.JSON向Python的数据类型转换。
2.Python的数据类型向JSON转换。
Python向JSON的数据类型转换
Python转换到JSON使用:“json.dumps”函数。
dumps函数语法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf8",default=None,sort_keys=False, **kw)
其中:
1.ensure_ascii:该项设置为False可以输出中文
2.indent:可以设置json对象的缩进(4代表一个Tab的缩进)
3.separators:通过separators可以设置json对象的分隔符
4.sort_keys:当该项设置为True时,生成的json对象是按键排序的。
例如:
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
data2 = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data2)
上面的代码输出结果为:
{"a": "Runoob","b": 7 }
PS:在Python将某个数据转换为JSON格式后,我们在python中进行type查看数据类型,仍然是str类型,这代表着Python仅仅是将数据改动成json的“格式”,并不是在Python中创建了一个json数据类型,在python中没有json数据类型!!!
向某个JSON文件写入数据,我们可以使用:“json.dump”函数,不再是dumps函数。
格式:
dump(要写入的json数据,文件权柄)
JSON向Python转换
JSON向Python转换使用:“json.loads”函数。
例如:
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print(text)
输出为:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
值得注意的是,不同的json对象转换成的Python数据类型也是不同的,详情可以看下表:
对某个JSON文件进行读取,我们可以使用:“json.load”函数,而不是loads函数。
格式:
load(文件权柄)
对于JSON文件操作的示例
存json文件
info = {'name':'人', 'husband':'人人', 'age':22}
file = open ('人.json', 'w', encoding='utf-8')
json.dump(info, filee)
file.close()
读json文件
file = open ('人.json', 'r', encoding='utf-8')
my_info = json.load(file)
file.close()