Python教程-Python JSON
JSON,全称JavaScript Object Notation,是一种流行的在线数据交换格式。JSON是在客户端和服务器之间组织数据的最佳格式。编程语言JavaScript的语法与这种语言相似。JSON的主要目标是在客户端和Web服务器之间进行数据传输。它是交换数据的最有效方法,而且容易掌握。它与许多其他编程语言一起工作,包括Python、Perl、Java等。
在JavaScript中,JSON主要支持以下六种数据形式:
- 字符串(String)
- 数字(Number)
- 布尔值(Boolean)
- 空值(Null)
- 对象(Object)
- 数组(Array)
JSON有两个基本结构:
- 数据以名称/值对的形式保存。它类似于记录、对象、字典、哈希表或键控列表。
- 数组、向量、列表或序列等都被视为值的有序列表。
Python的字典与JSON数据结构类似。以下是JSON数据的示例:
{
"book": [
{
"id": 01,
"language": "English",
"edition": "Second",
"author": "Derrick Mwiti"
],
{
{
"id": 02,
"language": "French",
"edition": "Third",
"author": "Vladimir"
}
} 使用Python处理JSON
Python提供了一个名为json的模块,用于处理JSON数据。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数据存储在文件中。json模块中提供了dump()和dumps()方法,用于修改Python对象。
以下是从Python对象创建的JSON项的示例。下面是每个项目的列表:
| 序号 | Python 对象 | JSON |
|---|---|---|
| 1. | 字典(Dict) | 对象(Object) |
| 2. | 列表、元组 | 数组(Array) |
| 3. | 字符串(Str) | 字符串(String) |
| 4. | 整数、浮点数 | 数字(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) 输出文件(data.json)内容:
{"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", "javatiku"]))
#Python tuple conversion to JSON Array
print(json.dumps(("Welcome", "to", "javatiku")))
# 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", "javatiku"]
["Welcome", "to", "javatiku"]
"Hello"
1234
23.572
true
false
nullJSON 反序列化
将JSON数据转换为Python对象的过程称为反序列化。json 模块的load() 和 loads() 方法用于将 JSON 数据转换为Python对象。以下是每个项目的列表:
| 序号 | JSON | Python |
|---|---|---|
| 1. | 对象(Object) | 字典(Dict) |
| 2. | 数组(Array) | 列表(List) |
| 3. | 字符串(String) | 字符串(Str) |
| 4. | 数字(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对象编码为文件中的JSON。然后,我们使用load() 函数和read_file 参数读取JSON文件。
loads() 函数是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.load() 函数用于加载JSON文件,而 json.loads() 函数用于加载字符串。
json.dump() vs json.dumps()
当我们要将Python对象序列化为JSON文件时,我们使用 json.dump() 函数。我们还使用 json.dumps() 函数将JSON数据转换为字符串以进行处理和打印。
Python 格式化输出漂亮的 JSON
在需要分析和调试大量JSON数据时,可以通过向 json.dump() 和 json.dumps() 函数提供额外的参数来实现。比如 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 编码 - 使用demjson 包中的 encode() 函数将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"}]解码 - 使用 demjson 模块的 decode() 函数将JSON对象转换为Python格式类型。
以下是语法:
Import demjson
a = "['Peter', 'Smith', 'Ricky', 'Hayden']"
print(demjson.decode(a)) 输出:
['Peter', 'Smith', 'Ricky', 'Hayden']在本教程中,我们学习了Python中的JSON。JSON是在客户端和Web服务器之间传输数据的最有效方法。