首页 > 编程语言 >关于Python的学习记录(二十一_对象的序列化和反序列化)

关于Python的学习记录(二十一_对象的序列化和反序列化)

时间:2023-08-04 19:03:00浏览次数:50  
标签:name Python age 二十一 JSON json dict 序列化 my

JSON 概述

在 Python 中,我们可以将程序中的数据以 JSON 格式进行保存。JSON 是“JavaScript Object Notation”的缩写,它本来是 JavaScript 语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨语言跨平台的数据交换。使用 JSON 的原因非常简单,因为它结构紧凑而且是纯文本,任何操作系统和编程语言都能处理纯文本,这就是实现跨语言跨平台数据交换的前提条件。

{
    name: "Stan",
    age: 20,
    hobbies: ["running", "swim"],
    teachers: [
        {
            name: 'Tony',
            age: 31,
        }
    ]
}

表 1:JavaScript 数据类型(值)对应的 Python 数据类型(值)

JSON

Python

object

dict

array

list

string

str

number

int / float

number (real)

float

boolean (true / false)

bool (True / False)

null

None

表 2:Python 数据类型(值)对应的 JavaScript 数据类型(值)

Python

JSON

dict

object

list / tuple

array

str

string

int / float

number

bool (True / False

boolean (true / false)

None

null

在 Python 中,如果要将字典处理成 JSON 格式(以字符串形式存在),可以使用json模块的dumps函数,代码如下所示。

json模块有四个比较重要的函数,分别是:

  • dump - 将 Python 对象按照 JSON 格式序列化到文件中
  • dumps - 将 Python 对象处理成 JSON 格式的字符串
  • load - 将文件中的 JSON 数据反序列化成对象
  • loads - 将字符串的内容反序列化成 Python 对象

将对象转成 JSON 字符串

import json

my_dict = {
    'name': "Stan",
    'age': 20,
    'hobbies': ["running", "swim"],
    'teachers': [
        {
            'name': '张老师',
            'age': 31,
        }
    ]
}

# {"name": "Stan", "age": 20, "hobbies": ["running", "swim"], "teachers": [{"name": "\u5f20\u8001\u5e08", "age": 31}]}
print(json.dumps(my_dict))
# {"name": "Stan", "age": 20, "hobbies": ["running", "swim"], "teachers": [{"name": "张老师", "age": 31}]}
print(json.dumps(my_dict, ensure_ascii=False))

如果数据中有中文,需要在 dumps 函数中指定 ensure_ascii=False,不然输出的中文会被 unicode 字符编码代替。

将 JSON 字符串转成对象

import json

my_dict_str = '{"name": "Stan", "age": 20, "hobbies": ["running", "swim"], "teachers": [{"name": "张老师", "age": 31}]}'
try:
    my_dict = json.loads(my_dict_str) # 字符串不一定是 JSON 格式,所以这次转换是有可能出错的,我们需要异常捕获
    print(my_dict['name']) # Stan
except Exception as e:
    print(e)

JSON 和文件读写操作

import json

my_dict = {
    'name': "Stan",
    'age': 20,
    'hobbies': ["running", "swim"],
    'teachers': [
        {
            'name': '张老师',
            'age': 31,
        }
    ]
}

# 序列化
with open('data.json', 'w') as file:
    json.dump(my_dict, file)

# 反序列化
with open('data.json', 'r') as file:
    my_dict_2 = json.load(file)
    print(type(my_dict_2))	#<class 'dict'>
    print(my_dict_2['name']) # Stan

标签:name,Python,age,二十一,JSON,json,dict,序列化,my
From: https://blog.51cto.com/u_16181955/6966208

相关文章

  • Python数据的深浅拷贝
    一、怎么理解深浅拷贝二、本人之前的错误理解(写到最后我会进行提示,以防某些同学跟着我之前的思路走,导致理解混乱,怕自己理解混乱的同学可以不看这部分。) 一、深浅拷贝主要的区别是在于数据进行拷贝的时候,发生的变化浅拷贝:创建一个新对象,然后将原始对象中的元素复制到新对象中......
  • 漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞
    OracleWebLogicServer漏洞研究报告一、漏洞信息搜集1.1漏洞信息表漏洞名称OracleWebLogicServer反序列化漏洞发布时间2020年4月16日漏洞编号CVE-2020-2883威胁类型反序列化漏洞危害级别高危影响版本OracleWebLogicServer10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0版......
  • 漏洞复现报告:CVE-2019-2890 反序列化漏洞
    OracleWebLogicServer漏洞研究报告一、漏洞信息搜集1.1漏洞信息表漏洞名称OracleWebLogicServer反序列化漏洞发布时间2019年10月16日漏洞编号CVE-2019-2890威胁类型反序列化漏洞危害级别高危影响版本OracleWebLogicServer10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0......
  • 光环大数据python爬虫
    一、全面的爬虫工程师的技能单   1、python编程语言基础   2、HTTP协议(处理响应,)   3、html,css,javascript基本web技能   4、mysql/mongodb/redis等存储系统   5、urllib/requests/scrapy/pyspider 用来模拟浏览器发起HTTP请求的组件   6、抓包......
  • 如何在python中执行另一个py文件
    使用命令:os.system(‘pythonfile_name.py’)解释:os.system是执行当前的系统命令1、拿windows系统举例:#由于ipconfig/all在windows中是查看ip地址#所以将此命令运行在os.system中,即可查看系统的ip地址等信息importosos.system('ipconfig/all')#因为pythonfile_name.p......
  • python中字典的循环遍历的两种方式
    开发中经常会用到对于字典、列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式。注意:python2和python3中,下面两种方法都是通用的。1.只对键的遍历一个简单的for语句就能循环字典的所有键,就像处理序列一......
  • php反序列化
    serialize() 函数用于序列化对象或数组,并返回一个字符串。unserialize()反序列化,将字符串转化为对象。通常见到调用外部文件,然后需要通过调用某个函数来执行最终得到flag。常见函数如下: ......
  • 用 Python 自动创建 Markdown 表格 - 每天5分钟玩转 GPT 编程系列(4)
    目录1.他们居然问我要Prompts2.让GPT-4来写代码2.1我对DevChat说2.2DevChat回答2.3我又对DevChat说2.4DevChat的第二轮回答2.5我再次对DevChat说2.6DevChat回答2.7最后效果3.他们居然让我要写总结1.他们居然问我要Prompts早几天我用GPT-4写了一个Gol......
  • python有哪几种循环语句
    在Python中,常用的循环语句有以下几种:for循环:用于遍历给定的序列(如列表、字符串等)或可迭代对象的元素。循环会重复执行固定次数,或者依次遍历序列中的每个元素。示例:forelementinsequence:#在这里执行循环体代码while循环:通过判断条件是否为真来控制循环的执行。只......
  • Python爬虫——爬虫时如何知道是否代理ip伪装成功?
    在进行爬虫时,我们可能需要使用代理IP来伪装自己的身份,以避免被网站封禁。如何判断代理IP是否伪装成功呢?本篇文章将围绕这个问题展开讲解,同时提供Python代码示例。确认代理IP地址首先,我们需要确认代理IP地址是否正确。我们可以使用一些免费的代理IP池网站,如:站大爷、碟鸟ip、开心代理......