Python JSON
JSON,全称JavaScript对象表示法,是一种用于在线数据交换的流行数据格式。JSON是在客户端和服务器之间组织数据的最佳格式。编程语言JavaScript的语法与此语言类似。JSON的主要目标是在客户端和Web服务器之间进行数据传输。它是交换数据的最有效方法,且易于掌握。它与许多其他编程语言兼容,包括Python、Perl、Java等。
在JavaScript中,JSON主要支持以下六种数据形式:
- 字符串
- 数字
- 布尔
- 空值
- 对象
- 数组
JSON的基础是两个结构:
- 数据以名称/值对的形式保留。它可以像记录、对象、字典、哈希表或键值列表一样处理。
- 数组、向量、列表或序列都被视为值的有序列表。
Python字典类似于JSON数据结构。下面是JSON数据的示例:
{
"book": [
{
"id": 01,
"language": "English",
"edition": "Second",
"author": "Derrick Mwiti"
],
{
{
"id": 02,
"language": "French",
"edition": "Third",
"author": "Vladimir"
}
}
利用Python JSON
Json是Python提供的一个模块。Python支持标准库中的marshal和pickle模块,并且JSON API的功能与这些库类似。Python本身原生支持JSON的特性。
将JSON数据序列化的过程被称为编码。数据被转化为一系列字节,并使用序列化技术通过网络传送。
import json
print(dir(json))
输出:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
这节中将涵盖以下技术:
- load()
- loads()
- dump()
- dumps()
序列化JSON
将Python对象转换为JSON的过程称为序列化。当计算机需要处理大量数据时,将数据存储在文件中是一个好主意。使用JSON函数,我们可以将JSON数据存储在文件中。dump()和dumps()方法可在json模块中使用,并用于修改Python对象。
以下JSON项是由Python对象创建的。以下是每个列表:
Sr. | Python Objects | JSON |
---|---|---|
1. | Dict | Object |
2. | list, tuple | Array |
3. | Str | String |
4. | int, float | Number |
5. | True | true |
6. | False | false |
7. | None | null |
- 将 JSON 数据写入文件的 dump 函数
Python 中有一个 dump() 函数,用于以 JSON 格式进行数据通信(编码)。它接受两个位置参数:需要序列化的数据对象和需要接收字节的类似文件的对象。
让我们来看一个简单的序列化示例:
Import json
# Key:value mapping
student = {
"Name" : "Peter",
"Roll_no" : "0090014",
"Grade" : "A",
"Age": 20,
"Subject": ["Computer Graphics", "Discrete Mathematics", "Data Structure"]
}
with open("data.json","w") as write_file:
json.dump(student,write_file)
输出:
{"Name" : "Peter", "Roll_no" : "0090014" , "Grade" : "A", "Age" : 20, "Subject" : ["Computer Graphics", "Discrete Mathematics", "Data Structure"] }
在上面的程序中,一个名为data.json的文件以写模式打开。我们以写模式打开这个文件,这样如果文件不存在,就会被创建。使用json.dump()方法,将字典转换为JSON字符串。
- 函数dumps()
使用dumps()函数将序列化的数据保存在Python文件中。它只接受一个参数,即要序列化的Python数据。我们不会将数据写入磁盘,因此不使用类似文件的参数。让我们思考以下示例:
import json
# Key:value mapping
student = {
"Name" : "Peter",
"Roll_no" : "0090014",
"Grade" : "A",
"Age": 20
}
b = json.dumps(student)
print(b)
输出:
{"Name": "Peter", "Roll_no": "0090014", "Grade": "A", "Age": 20}
JSON允许层次化列表、元组、对象和基本数据类型,如字符串和数字。
import json
#Python list conversion to JSON Array
print(json.dumps(['Welcome', "to", "javaTpoint"]))
#Python tuple conversion to JSON Array
print(json.dumps(("Welcome", "to", "javaTpoint")))
# Python string conversion to JSON String
print(json.dumps("Hello"))
# Python int conversion to JSON Number
print(json.dumps(1234))
# Python float conversion to JSON Number
print(json.dumps(23.572))
# Boolean conversion to their respective values
print(json.dumps(True))
print(json.dumps(False))
# None value to null
print(json.dumps(None))
输出:
["Welcome", "to", "javaTpoint"]
["Welcome", "to", "javaTpoint"]
"Hello"
1234
23.572
true
false
null
JSON 反序列化
将 JSON 数据转换为 Python 对象的过程被称为反序列化。json 模块的 load() 和 loads() 方法用于将 JSON 数据转换为 Python 对象。以下是每个方法的列表:
SR. | JSON | Python |
---|---|---|
1. | Object | dict |
2. | Array | list |
3. | String | str |
4. | number(int) | int |
5. | true | True |
6. | false | False |
7. | null | None |
虽然严格来说不是JSON数据的精确转换,上表展示了序列化表相反的情况。这表明,如果我们对对象进行编码,然后再解码,可能得到的对象与原对象不相同。
让我们用一个现实世界的示例来说明。如果有人将任何东西翻译成中文,然后再翻译回英文,翻译可能会不正确。这个简单的示例就是一个说明。
import json
a = (10,20,30,40,50,60,70)
print(type(a))
b = json.dumps(a)
print(type(json.loads(b)))
输出:
<class 'tuple'>
<class 'list'>
- load() 方法
使用 load() 函数将文件中的 JSON 数据反序列化为 Python 对象。考虑以下示例:
import json
# Key:value mapping
student = {
"Name" : "Peter",
"Roll_no" : "0090014",
"Grade" : "A",
"Age": 20,
}
with open("data.json","w") as write_file:
json.dump(student,write_file)
with open("data.json", "r") as read_file:
b = json.load(read_file)
print(b)
输出:
{'Name': 'Peter', 'Roll_no': '0090014', 'Grade': 'A', 'Age': 20}
使用dump()函数,我们已经在上面的程序中将一个Python对象编码到文件中。然后,我们使用load()函数和参数read_file读取JSON文件。
load()函数是json模块的另一个特性,用于将JSON输入转换为Python对象。它与load()函数非常相似。考虑以下实例:
Import json
a = ["Mathew","Peter",(10,32.9,80),{"Name" : "Tokyo"}]
# Python object into JSON
b = json.dumps(a)
# JSON into Python Object
c = json.loads(b)
print(c)
输出:
['Mathew', 'Peter', [10, 32.9, 80], {'Name': 'Tokyo'}]
json.load() vs json.loads()
JSON文件使用json.load()函数加载,而字符串使用json.loads()函数加载。
json.dump() vs json.dumps()
当我们想要将Python对象序列化为JSON文件时,我们使用json.dump()函数。我们还使用json.dumps()函数将JSON数据转换为字符串以进行处理和打印。
Python Pretty Print JSON
有时需要分析和调试大量的JSON数据。我们可以通过为json.dumps()和json.dump()函数提供额外的参数,如indent和sort_keys来实现。
注意:dump()和dumps()函数都接受indent和sort_keys参数。
考虑以下示例:
import json
person = '{"Name": "Andrew","City":"English", "Number":90014, "Age": 23,"Subject": ["Data Structure","Computer Graphics", "Discrete mathematics"]}'
per_dict = json.loads(person)
print(json.dumps(per_dict, indent = 5, sort_keys= True))
输出:
{
"Age": 23,
"City": "English",
"Name": "Andrew",
"Number": 90014,
"Subject": [
"Data Structure",
"Computer Graphics",
"Discrete mathematics"
]
}
键按升序排序,并且在上述代码中将缩进参数设定为五个空格。sort_key的默认值为False,indent的默认值为None。
编码与解码
将文本或值转换为加密形式的过程称为编码。只有选择的用户可以在解码后使用加密数据。序列化是编码的另一个名称,反序列化是解码的另一个名称。对于JSON(对象)格式,执行编码和解码。Python中提供了一个用于这些任务的受欢迎的模块。可以使用以下命令在Windows上安装它:
pip install demjson
编码 - encode()
函数是demon包中的一部分,用于将Python对象转换为JSON字符串表示。
以下是语法:
demjson.encode(self,obj,nest_level = 0)
示例:1 – 使用demjson包进行编码
import demjson
a = [{"Name": 'Peter',"Age":20, "Subject":"Electronics"}]
print(demjson.encode(a))
输出:
[{"Age":20,"Name":"Peter","Subject":"Electronics"}]
解码 - demon 模块中的 decode() 函数用于将 JSON 对象转换为 Python 格式类型。
接下来是语法:
Import demjson
a = "['Peter', 'Smith', 'Ricky', 'Hayden']"
print(demjson.decode(a))
输出:
['Peter', 'Smith', 'Ricky', 'Hayden']
在本教程中,我们学习了关于Python JSON的内容。JSON是在客户端和Web服务器之间传输数据的最有效方式。