Python - JSON

Python - JSON 首页 / Python3入门教程 / Python - JSON

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

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

  • 字符串(String)
  • 数值(Number)
  • 布尔值(Boolean)
  • 空(Null)
  • 对象(Object)
  • 数组(Array)

JSON建立在两种结构上:

  • 它以名称/值对的形式存储数据。它被视为对象(object),记录(record),字典(dictionary),哈希表(hash table),键列表(keyed list)
  • 有序值列表被视为数组,向量,列表或序列。

JSON数据表示形式类似于Python字典。以下是JSON数据的示例:

链接:https://www.learnfk.comhttps://www.learnfk.com/python3/python-json.html

来源:LearnFk无涯教程网

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

使用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() dumps()方法。

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

Sr Python对象 JSON
1. DictObject
2.list,tuple Array
3. StrString
4. int,floatNumber
5.True true
6.False false
7.None null
  • 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)

输出:

{"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 列表转换为 JSON 数组
print(json.dumps(['Welcome', "to", "learnfk"]))

#Python 元组转换为 JSON 数组
print(json.dumps(("Welcome", "to", "learnfk")))

# Python 字符串转换为 JSON 字符串
print(json.dumps("Hello"))

# Python int 转换为 JSON 数字
print(json.dumps(1234))

# Python 浮点数转换为 JSON 数字
print(json.dumps(23.572))

#布尔转换为各自的值
print(json.dumps(True))
print(json.dumps(False))

# None值为空
print(json.dumps(None)) 

输出:

["Welcome", "to", "learnfk"]
["Welcome", "to", "learnfk"]
"Hello"
1234
23.572
true
false
null

反序列化JSON

反序列化是将JSON数据解码为Python对象的过程。 json模块提供了两种方法 load() loads(),这些方法用于以实际的Python对象形式转换JSON数据。列表如下:

SR。 JSON Python
1.Object dict
2. Arraylist
3.String str
4. number(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()函数 -  函数用于将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 对象转换成 JSON 
b = json.dumps(a)

# JSON 转换成 Python 对象
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.dumps()函数用于将JSON数据转换为字符串用于解析和打印。

打印JSON

有时需要分析和调试大量JSON数据。可以通过在json.dumps()和json.dump()方法中传递其他参数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"
    ]
}

在上面的代码中,为indent参数提供了5个空格,并且键以升序排列。缩进的默认值为None sort_key 的默认值为 False

编码和解码

编码是将文本或值转换为加密形式的技术。加密的数据只能由首选用户通过解码来使用。编码也称为串行化,而解码也称为反序列化。编码和解码是针对JSON(object)格式进行的。 Python为此类操作提供了流行的软件包。无涯教程可以通过以下命令将其安装在Windows上:

pip install demjson

encode编码 - 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"}]

decode解码   demjson 模块提供了 decode()函数,该函数用于将JSON对象转换为Python格式类型。语法如下:

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

输出:

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

深入浅出gRPC -〔李林锋〕

从0开始做增长 -〔刘津〕

小马哥讲Spring核心编程思想 -〔小马哥〕

Electron开发实战 -〔邓耀龙〕

乔新亮的CTO成长复盘 -〔乔新亮〕

容器实战高手课 -〔李程远〕

AI绘画核心技术与实战 -〔南柯〕

PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

好记忆不如烂笔头。留下您的足迹吧 :)