Python JSON

JSON 代表 JavaScript 对象符号,这是一种广泛用于网络数据交换的数据格式。JSON 是在客户机和服务器之间组织数据的理想格式。它的语法类似于 JavaScript 编程语言。JSON 的主要目标是在客户端和网络服务器之间传输数据。这很容易学习,也是交换数据最有效的方法。可以和**PerlJava**等各种编程语言配合使用。

JSON 主要支持 6 种数据类型在 JavaScript 中:

  • String

  • Number

  • Boolean

  • Null

  • Object

  • Array

JSON 建立在两种结构之上:

  • 它将数据存储在名称/值对中。它被视为对象、记录、字典、哈希表、键控列表

  • 值的有序列表被视为数组、向量、列表或序列。

JSON 数据表示类似于 Python 字典。下面是一个 JSON 数据的例子:


{
"book": [
{
"id": 01,
"language": "English",
"edition": "Second",
"author": "Derrick Mwiti"
],
{
{
"id": 02,
"language": "French",
"edition": "Third",
"author": "Vladimir"
}
}

使用 Python JSON

Python 提供了一个名为 json 的模块。Python 支持标准库封送和 pickle模块,JSON API 的行为与这些库类似。Python 本身支持 JSON 特性。

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 模块提供了用于转换 Python 对象的 dump() 和**dump()**方法。

Python 对象被转换为以下 JSON 对象。清单如下:

Python 对象数据
DictObject
list, tupleArray
StrString
int,floatNumber
Truetrue
Falsefalse
Nonenull
  • dump()功能

将 JSON 数据写入文件

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 对象形式。清单如下:

jsonPython
Objectdict
Arraylist
Stringstr
number(int)int
trueTrue
falseFalse
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 对象进行了编码。之后我们使用 load() 函数读取 JSON 文件,这里我们已经传递了 read_file 作为参数。

json 模块还提供了 loads() 函数,用于将 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()与 json.loads()

json.load() 函数用于加载 json 文件,而 json.loads() 函数用于加载字符串。

json.dump()与 JSON.dumps()

当我们想要将 Python 对象序列化为 json 文件时,使用 json.dump() 函数,使用**JSON . dump()**函数将 JSON 数据转换为字符串进行解析和打印。

Python 漂亮打印 JSON

有时我们需要分析和调试大量的 JSON 数据。这可以通过在 json.dump()和 JSON.dump()方法中传递额外的参数 indent 和 sort_keys 来实现。

注意:dump()和 dumps()函数都接受缩进和短键参数。

考虑以下示例:


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"
]
}

在上面的代码中,我们为缩进参数提供了 5 个空格,并且键是按升序排序的。缩进的默认值为False,** Sort_key的默认值为False**。

编码和解码

编码是将文本或值转换成加密形式的技术。加密数据只能由首选用户通过解码来使用。编码也称为序列化,解码也称为反序列化。对 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模块提供**解码()**功能,用于将 json 对象转换为 Python 格式类型。语法如下:


Import demjson
a = "['Peter', 'Smith', 'Ricky', 'Hayden']"
print(demjson.decode(a))

输出:

['Peter', 'Smith', 'Ricky', 'Hayden']

在本教程中,我们已经了解了 Python JSON。JSON 是客户端和 web 服务器之间传输数据最有效的方式。

原文:https://www.javatpoint.com/python-json