如何在Python中使用JSON数据
{
"name":"Ashton",
"age":15,
"grade":8,
"subjects":["math", "english", "science"],
}
如你所见,以上数据非常易读,看起来很像Python。数据项由键/值对组成,键/值对之间包含一个冒号(:)。此外,两个数据项之间用逗号(,)分隔。
从入门开始,让我们开始,看看如何在Python中处理JSON数据。
Python具有对JSON的本地支持,并为此提供了内置模块json。在代码顶部添加以下行以开始使用JSON。
import json
首先,让我们看一下如何执行序列化,即编码JSON数据。
编码JSON数据(从Python到JSON)
将JSON写入文件
json模块提供dump()方法以将JSON数据写入文件。它带有两个必需的参数,一个要编码的Python对象和一个类似文件的实例。考虑以下示例。
import json
student_data = {
"name":"Ashton",
"age": 15,
"grade": 8,
"subjects": ["math", "english", "science"]
}
f = open("output.json", 'w')
json.dump(student_data, f)
输出
{“ name”:“ Ashton”,“ age”:15,“ grade”:8,“ subject”:[“ math”,“ english”,“ science”]
如上例所示,我们有一个Python字典,其中包含学生的信息,例如姓名,年龄,年级和科目。我们以写入模式打开output.json文件,然后将student_data对象转储到JSON文件中。
请考虑下表,该表显示了Python对象到JSON的转换。
你还可以使用一些参数以更漂亮的格式写入JSON数据。例如,缩进参数可以采用非负整数或字符串来指定缩进值。
如果传递0,负值或空字符串,则dump()将仅插入换行符。此外,设置“无”(默认值)可得到最紧凑的表示形式。
你还可以通过将True传递给sort_keys参数来按键对数据进行排序。默认情况下,它为False。让我们举个例子。
import json
student_data = {
"name":"Ashton",
"age": 15,
"grade": 8,
"subjects": ["math", "english", "science"]
}
f = open("output.json", 'w')
json.dump(student_data, f, indent=2, sort_keys=True)
输出
{
"age": 15,
"grade": 8,
"name": "Ashton",
"subjects": " [
"math",
"english",
"science",
]
}
正如你在上面的输出中看到的那样,它更干净,更易于阅读。
将Python对象转换为JSON字符串
要将序列化的对象转换为JSON字符串,可以使用dumps()方法。它类似于dump(),不同之处在于它不需要文件对象,并且它返回包含JSON格式信息的字符串。让我们来看看。
import json
student_data = {
"name":"Ashton",
"age": 15,
"grade": 8,
"subjects": ["math", "english", "science"]
}
json_string = json.dumps(student_data, indent=2, sort_keys=True)
print(json_string)
print(type(json_string))
输出
{
"age": 15,
"grade": 8,
"name": "Ashton",
"subjects": [
"math",
"english",
"science"
]
}
<class 'str'>
现在,让我们继续看看如何执行反序列化,即解码JSON数据。
解码JSON数据(将JSON转换为Python)
解析JSON文件
json模块提供load()方法,以将JSON从文件加载到Python对象。它需要一个类似文件的对象作为其必需参数。示例如下。
import json
f = open('sample.json', 'r')
data = json.load(f)
print(data)
print(type(data))
输出
{'name':'Ashton','age':15,'grade':8,'address':None,subject':['math','english','science']}
<class'dict'>
下表列出了从JSON到Python的转换规则。
将JSON字符串解析为对象
同样,你可以使用loads()方法将JSON字符串转换为Python对象。它使用包含JSON文档的字符串作为其必需参数。让我们来看看。
import json
json_str = '''{
"name":"Ashton",
"age":15,
"grade":8,
"address":null,
"subjects":["math", "english", "science"]
}'''
data_parsed = json.loads(json_str)
print(data)
print(type(data))
输出
{'name': 'Ashton', 'age': 15, 'grade': 8, 'address': None, 'subjects':
['math', 'english', 'science']}
<class 'dict'>
在这里,json_str变量在多行字符串中包含一个JSON文档。使用loads()方法将其解析为字典。
这里要注意的另一件事是,如果先对Python对象进行序列化然后反序列化,则它不一定等于原始对象。考虑以下示例。
import json
student_data = {
"name":"Ashton",
"age": 15,
"grade": 8,
"subjects": ("math", "english", "science")
}
json_string = json.dumps(student_data, indent=2, sort_keys=True)
parsed_data = json.loads(json_string)
print(student_data==parsed_data)
输出
false
在上面的示例中,student_data包含一个关键主题,其值是元组类型。当student_data序列化为JSON字符串时,受试者的值将根据转换规则转换为数组。当我们执行解码时,它会转换为列表而不是元组。因此,原始数据和解码后的数据不相等。
学习更多技能
请点击下方公众号