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
null
JSON 反序列化
将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服务器之间传输数据的最有效方法。