首先什么是JSON?
JSON(JavaScript Object Notation, JS 对象简谱,即JavaScript对象表示法) 是一种用于表示结构化数据的流行数据格式。 在服务器和web应用程序之间以JSON格式传输和接收数据是很常见的。
在Python中,JSON以字符串的形式存在(即JSON字符串),例如:
json_str = '{"name":"zhangsan","languages":["Python","Java"]}'
在文件中存储JSON对象也是很常见的
引入json模块
要使用JSON(字符串或包含JSON对象的文件),你可以使用Python的json模块。在使用该模块之前,需要先引入它。
import json
Python中解析JSON
使用json模块解析JSON字符串和包含JSON对象的文件是很容易的。
例1: 在Python中将JSON解析成dict
使用json.loads()方法来解析JSON字符串。该方法返回一个字典。
import json person = '{"name":"zhangsan","languages":["Python","Java"]}' person_dict = json.loads(person) print(person_dict) print(type(person_dict)) print(person_dict["languages"])
打印结果, 可以看到,person 是一个JSON 字符串, person_dict 是一个字典。
{'name': 'zhangsan', 'languages': ['Python', 'Java']} <class 'dict'> ['Python', 'Java']
例2 : 使用Python读取JSON文件
使用json.load()方法读取一个包含JSON对象的文件。
当前文件下有一个person.json,它包含一个JSON对象。
# person.json { "name":"lisi", "languages":["English","Fench"] }
然后来解析这个person.json的json文件
import json with open('person.json') as f: data = json.load(f) print(data) print(type(data))
使用open()函数读取json文件。然后,使用json.load()方法解析文件,该方法会返回一个字典
{'name': 'lisi', 'languages': ['English', 'Fench']} <class 'dict'>
使用Python将字段转换为JSON字符串
可以使用 json.dumps()方法将字典转换成JSON字符串。
例3:将字典转换为JSON
import json person_dict = { "name":"xiaowang", "age":21, "sex":None } person_json = json.dumps(person_dict) print(person_json) print(type(person_json))
结果:
{"name": "xiaowang", "age": 21, "sex": null} <class 'str'>
Python对象及其与JSON的等效转换
将JSON写入一个文件
在Python中将JSON写入文件,我们可以使用json.dump()方法
例4:将JSON写入一个文件
import json person_dict = { "name": "Bob", "languages": ["English", "Fench"], "married": True, "age": 36 } with open("person.txt","w") as json_file: json.dump(person_dict,json_file)
然后就可以看见在当前的文件下有一个person.txt的文件,打开文件,就会看见保存的json数据
为了分析和调试JSON数据,我们可以通过向json.dumps()和json.dump()方法传递额外的参数indent和sort_keys来实现。
例5: 使用Python完美输出JSON
import json person_string = '{"name": "Bob", "languages": ["English", "Fench"], "married": true, "age": 36}' # 将json字符串转化为字典 person_dict = json.loads(person_string) # 完美输出JSON print(json.dumps(person_dict,indent=4,sort_keys=True))
参数介绍: indent=4 ,使用了4个空格进行缩进,并且,键值是按升序排序的
indent的默认值是None, sort_keys的默认值为False。
运行之后的结果: