📜  Python JSON

📅  最后修改于: 2020-10-28 01:34:06             🧑  作者: Mango

Python JSON

JSON代表JavaScript Object Notation,这是一种广泛用于Web上数据交换的数据格式。 JSON是在客户端和服务器之间组织数据的理想格式。它的语法类似于JavaScript编程语言。 JSON的主要目的是在客户端和Web服务器之间传输数据。它易于学习,是交换数据的最有效方法。它可以与各种编程语言一起使用,例如Python,Perl,Java等。

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

  • 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']

在本节中,我们将学习以下方法:

  • 加载()
  • 负载()
  • 倾倒()
  • dumps()

序列化JSON

序列化是将Python对象转换为JSON的技术。有时,计算机需要处理大量信息,因此最好将该信息存储到文件中。我们可以使用JSON函数将JSON数据存储到文件中。 json模块提供用于转换Python对象的dump()和dumps()方法。

Python对象将转换为以下JSON对象。列表如下:

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
  • 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()和load(),用于转换实际Python对象形式的JSON数据。列表如下:

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)))

输出:



  • 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.dumps()函数用于JSON数据转换为字符串解析和打印json.dump()函数使用。

Python漂亮打印JSON

有时我们需要分析和调试大量JSON数据。可以通过在json.dumps()和json.dump()方法中传递其他参数indent和sort_keys来完成。

注意:dump()和dumps()函数均接受indent和short_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"
    ]
}

在上面的代码中,我们为indent参数提供了5个空格,并且键以升序排列。缩进的默认值为None,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模块提供了encode()函数,该函数用于将JSON对象转换为Python格式类型。语法如下:

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

输出:

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

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