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支持标准库中的marshalpickle模块,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对象。以下是每个项目的列表:

序号JSONPython
1.对象(Object)字典(Dict)
2.数组(Array)列表(List)
3.字符串(String)字符串(Str)
4.数字(int)整数(Int)
5.trueTrue
6.falseFalse
7.nullNone

尽管从技术上讲,上述表格不是对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() 函数提供额外的参数来实现。比如 indentsort_keys

注意:dump()dumps() 函数都接受 indentsort_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服务器之间传输数据的最有效方法。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程