如何在Python中使用JSON数据

共 3405字,需浏览 7分钟

 ·

2021-05-24 20:17

英文 | https://www.ordinarycoders.com/blog/article/work-with-JSON-Python
翻译 | 小爱
在本文中,我们将学习如何在Python中使用JSON数据。JSON代表JavaScript Object Notation,它是一种流行的基于文本的数据格式。
尽管JSON是从JS派生的,但它已经独立于语言一段时间了。
因此,任何编程语言都可以使用它。它用于存储和交换数据。
例如,从API提取数据或在某些文档数据库中使用数据时,数据大多采用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字符串时,受试者的值将根据转换规则转换为数组。当我们执行解码时,它会转换为列表而不是元组。因此,原始数据和解码后的数据不相等。 


学习更多技能

请点击下方公众号


浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报